IBindingList Interface
Provides the features required to support both complex and simple scenarios when binding to a data source.
Assembly: System (in System.dll)
The IBindingList type exposes the following members.
| Name | Description | |
|---|---|---|
![]() ![]() | AllowEdit | Gets whether you can update items in the list. |
![]() ![]() | AllowNew | Gets whether you can add items to the list using AddNew. |
![]() ![]() | AllowRemove | Gets whether you can remove items from the list, using Remove or RemoveAt. |
![]() ![]() | Count | Gets the number of elements contained in the ICollection. (Inherited from ICollection.) |
![]() ![]() | IsFixedSize | Gets a value indicating whether the IList has a fixed size. (Inherited from IList.) |
![]() ![]() | IsReadOnly | Gets a value indicating whether the IList is read-only. (Inherited from IList.) |
![]() ![]() | IsSorted | Gets whether the items in the list are sorted. |
![]() ![]() | IsSynchronized | Gets a value indicating whether access to the ICollection is synchronized (thread safe). (Inherited from ICollection.) |
![]() ![]() | Item | Gets or sets the element at the specified index. (Inherited from IList.) |
![]() ![]() | SortDirection | Gets the direction of the sort. |
![]() ![]() | SortProperty | Gets the PropertyDescriptor that is being used for sorting. |
![]() ![]() | SupportsChangeNotification | Gets whether a ListChanged event is raised when the list changes or an item in the list changes. |
![]() ![]() | SupportsSearching | Gets whether the list supports searching using the Find method. |
![]() ![]() | SupportsSorting | Gets whether the list supports sorting. |
![]() ![]() | SyncRoot | Gets an object that can be used to synchronize access to the ICollection. (Inherited from ICollection.) |
| Name | Description | |
|---|---|---|
![]() ![]() | Add | Adds an item to the IList. (Inherited from IList.) |
![]() ![]() | AddIndex | Adds the PropertyDescriptor to the indexes used for searching. |
![]() ![]() | AddNew | Adds a new item to the list. |
![]() ![]() | ApplySort | Sorts the list based on a PropertyDescriptor and a ListSortDirection. |
![]() ![]() | Clear | Removes all items from the IList. (Inherited from IList.) |
![]() ![]() | Contains | Determines whether the IList contains a specific value. (Inherited from IList.) |
![]() ![]() | CopyTo | Copies the elements of the ICollection to an Array, starting at a particular Array index. (Inherited from ICollection.) |
![]() ![]() | Find | Returns the index of the row that has the given PropertyDescriptor. |
![]() ![]() | GetEnumerator | Returns an enumerator that iterates through a collection. (Inherited from IEnumerable.) |
![]() ![]() | IndexOf | Determines the index of a specific item in the IList. (Inherited from IList.) |
![]() ![]() | Insert | Inserts an item to the IList at the specified index. (Inherited from IList.) |
![]() ![]() | Remove | Removes the first occurrence of a specific object from the IList. (Inherited from IList.) |
![]() ![]() | RemoveAt | Removes the IList item at the specified index. (Inherited from IList.) |
![]() ![]() | RemoveIndex | Removes the PropertyDescriptor from the indexes used for searching. |
![]() ![]() | RemoveSort | Removes any sort applied using ApplySort. |
| Name | Description | |
|---|---|---|
![]() | AsParallel | Enables parallelization of a query. (Defined by ParallelEnumerable.) |
![]() | AsQueryable | Converts an IEnumerable to an IQueryable. (Defined by Queryable.) |
![]() ![]() | Cast<TResult> | Casts the elements of an IEnumerable to the specified type. (Defined by Enumerable.) |
![]() ![]() | OfType<TResult> | Filters the elements of an IEnumerable based on a specified type. (Defined by Enumerable.) |
This interface is implemented by the DataView class. Implementation of a method should exhibit the same behavior as the implementation of that method in the DataView class.
When you call the ApplySort or RemoveSort methods, you should raise a ListChanged event with the Reset enumeration.
When you call the AddNew method, you should raise a ListChanged event with the ItemAdded enumeration carrying the appropriate index. The added row is in a state where pressing the ESC on a DataGridView control can remove the new row. Raising the ListChanged event with the ItemAdded enumeration a second time on this row indicates that the item is now a row not in the "new" state.
When you remove an item or call the CancelEdit method on a new row (if that row implements IEditableObject), you should raise a ListChanged event with the ItemDeleted enumeration carrying the appropriate index.
The following example provides a simple implementation of the IBindingList interface. The CustomerList class stores customer information in a list. This example assumes that you have used the Customer class that can be found in the example in the IEditableObject class.
public class CustomersList : CollectionBase, IBindingList { private ListChangedEventArgs resetEvent = new ListChangedEventArgs(ListChangedType.Reset, -1); private ListChangedEventHandler onListChanged; public void LoadCustomers() { IList l = (IList)this; l.Add(ReadCustomer1()); l.Add(ReadCustomer2()); OnListChanged(resetEvent); } public Customer this[int index] { get { return (Customer)(List[index]); } set { List[index] = value; } } public int Add (Customer value) { return List.Add(value); } public Customer AddNew() { return (Customer)((IBindingList)this).AddNew(); } public void Remove (Customer value) { List.Remove(value); } protected virtual void OnListChanged(ListChangedEventArgs ev) { if (onListChanged != null) { onListChanged(this, ev); } } protected override void OnClear() { foreach (Customer c in List) { c.Parent = null; } } protected override void OnClearComplete() { OnListChanged(resetEvent); } protected override void OnInsertComplete(int index, object value) { Customer c = (Customer)value; c.Parent = this; OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, index)); } protected override void OnRemoveComplete(int index, object value) { Customer c = (Customer)value; c.Parent = this; OnListChanged(new ListChangedEventArgs(ListChangedType.ItemDeleted, index)); } protected override void OnSetComplete(int index, object oldValue, object newValue) { if (oldValue != newValue) { Customer oldcust = (Customer)oldValue; Customer newcust = (Customer)newValue; oldcust.Parent = null; newcust.Parent = this; OnListChanged(new ListChangedEventArgs(ListChangedType.ItemAdded, index)); } } // Called by Customer when it changes. internal void CustomerChanged(Customer cust) { int index = List.IndexOf(cust); OnListChanged(new ListChangedEventArgs(ListChangedType.ItemChanged, index)); } // Implements IBindingList. bool IBindingList.AllowEdit { get { return true ; } } bool IBindingList.AllowNew { get { return true ; } } bool IBindingList.AllowRemove { get { return true ; } } bool IBindingList.SupportsChangeNotification { get { return true ; } } bool IBindingList.SupportsSearching { get { return false ; } } bool IBindingList.SupportsSorting { get { return false ; } } // Events. public event ListChangedEventHandler ListChanged { add { onListChanged += value; } remove { onListChanged -= value; } } // Methods. object IBindingList.AddNew() { Customer c = new Customer(this.Count.ToString()); List.Add(c); return c; } // Unsupported properties. bool IBindingList.IsSorted { get { throw new NotSupportedException(); } } ListSortDirection IBindingList.SortDirection { get { throw new NotSupportedException(); } } PropertyDescriptor IBindingList.SortProperty { get { throw new NotSupportedException(); } } // Unsupported Methods. void IBindingList.AddIndex(PropertyDescriptor property) { throw new NotSupportedException(); } void IBindingList.ApplySort(PropertyDescriptor property, ListSortDirection direction) { throw new NotSupportedException(); } int IBindingList.Find(PropertyDescriptor property, object key) { throw new NotSupportedException(); } void IBindingList.RemoveIndex(PropertyDescriptor property) { throw new NotSupportedException(); } void IBindingList.RemoveSort() { throw new NotSupportedException(); } // Worker functions to populate the list with data. private static Customer ReadCustomer1() { Customer cust = new Customer("536-45-1245"); cust.FirstName = "Jo"; cust.LastName = "Brown"; return cust; } private static Customer ReadCustomer2() { Customer cust = new Customer("246-12-5645"); cust.FirstName = "Robert"; cust.LastName = "Brown"; return cust; } }
Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role supported with SP1 or later; Itanium not supported)
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
