| File: System\Windows\Forms\DataBinding\BindingsCollection.cs | Web Access |
| Project: src\winforms\src\System.Windows.Forms\System.Windows.Forms.csproj (System.Windows.Forms) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; using System.ComponentModel; namespace System.Windows.Forms; /// <summary> /// Represents a collection of data bindings on a control. /// </summary> [DefaultEvent(nameof(CollectionChanged))] public class BindingsCollection : BaseCollection { private readonly List<Binding> _list = []; private CollectionChangeEventHandler? _onCollectionChanging; private CollectionChangeEventHandler? _onCollectionChanged; internal BindingsCollection() { } public override int Count => _list.Count; /// <summary> /// Gets the bindings in the collection as an object. /// </summary> protected override ArrayList List => ArrayList.Adapter(_list); /// <summary> /// Gets the <see cref="Binding"/> at the specified index. /// </summary> public Binding this[int index] => _list[index]!; protected internal void Add(Binding binding) { CollectionChangeEventArgs eventArgs = new(CollectionChangeAction.Add, binding); OnCollectionChanging(eventArgs); AddCore(binding); OnCollectionChanged(eventArgs); } /// <summary> /// Adds a <see cref="Binding"/> to the collection. /// </summary> protected virtual void AddCore(Binding dataBinding) { ArgumentNullException.ThrowIfNull(dataBinding); _list.Add(dataBinding); } /// <summary> /// Occurs when the collection is about to change. /// </summary> [SRDescription(nameof(SR.collectionChangingEventDescr))] public event CollectionChangeEventHandler? CollectionChanging { add => _onCollectionChanging += value; remove => _onCollectionChanging -= value; } /// <summary> /// Occurs when the collection is changed. /// </summary> [SRDescription(nameof(SR.collectionChangedEventDescr))] public event CollectionChangeEventHandler? CollectionChanged { add => _onCollectionChanged += value; remove => _onCollectionChanged -= value; } protected internal void Clear() { CollectionChangeEventArgs eventArgs = new(CollectionChangeAction.Refresh, null); OnCollectionChanging(eventArgs); ClearCore(); OnCollectionChanged(eventArgs); } /// <summary> /// Clears the collection of any members. /// </summary> protected virtual void ClearCore() => _list.Clear(); /// <summary> /// Raises the <see cref="CollectionChanging"/> event. /// </summary> protected virtual void OnCollectionChanging(CollectionChangeEventArgs e) { _onCollectionChanging?.Invoke(this, e); } /// <summary> /// Raises the <see cref="CollectionChanged"/> event. /// </summary> protected virtual void OnCollectionChanged(CollectionChangeEventArgs ccevent) { _onCollectionChanged?.Invoke(this, ccevent); } protected internal void Remove(Binding binding) { CollectionChangeEventArgs eventArgs = new(CollectionChangeAction.Remove, binding); OnCollectionChanging(eventArgs); RemoveCore(binding); OnCollectionChanged(eventArgs); } protected internal void RemoveAt(int index) => Remove(this[index]); /// <summary> /// Removes the specified <see cref="Binding"/> from the collection. /// </summary> protected virtual void RemoveCore(Binding dataBinding) => _list.Remove(dataBinding); protected internal bool ShouldSerializeMyAll() => Count > 0; }