Прочитать на английском

Поделиться через


IBindingList Интерфейс

Определение

Обеспечивает возможности, необходимые для поддержки как сложных, так и простых скриптов при связывании с источником данных.

public interface IBindingList : System.Collections.IList
Производный
Реализации

Примеры

В следующем примере представлена IBindingList простая реализация интерфейса . Класс CustomerList хранит сведения о клиентах в списке. В этом примере предполагается, что вы использовали Customer класс, который можно найти в примере в IEditableObject классе .

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;
    }
}

Комментарии

Этот интерфейс реализуется классом DataView . Реализация метода должна проявлять то же поведение, что и реализация этого метода в DataView классе .

При вызове ApplySort методов или RemoveSort необходимо вызвать ListChanged событие с перечислением Reset .

При вызове AddNew метода необходимо вызвать ListChanged событие с перечислением ItemAdded , несущим соответствующий индекс. Добавленная строка находится в состоянии, когда нажатие клавиши ESC на элементе DataGridView управления может удалить новую строку. Повторный ListChanged вызов события с перечислением ItemAdded в этой строке означает, что элемент теперь является строкой, не в состоянии "новый".

При удалении элемента или вызове CancelEdit метода в новой строке (если эта строка реализует IEditableObject), необходимо вызвать ListChanged событие с перечислением ItemDeleted , несущим соответствующий индекс.

Свойства

AllowEdit

Возвращает значение, показывающее, можно ли обновить элементы в списке.

AllowNew

Возвращает значение, показывающее, можно ли добавить элементы в список, используя метод AddNew().

AllowRemove

Возвращает значение, показывающее, можно ли удалить элементы из списка с помощью метода Remove(Object) или RemoveAt(Int32).

Count

Получает число элементов, содержащихся в интерфейсе ICollection.

(Унаследовано от ICollection)
IsFixedSize

Получает значение, указывающее, имеет ли список IList фиксированный размер.

(Унаследовано от IList)
IsReadOnly

Получает значение, указывающее, является ли объект IList доступным только для чтения.

(Унаследовано от IList)
IsSorted

Возвращает значение, показывающее, отсортированы ли элементы списка.

IsSynchronized

Возвращает значение, показывающее, является ли доступ к коллекции ICollection синхронизированным (потокобезопасным).

(Унаследовано от ICollection)
Item[Int32]

Возвращает или задает элемент по указанному индексу.

(Унаследовано от IList)
SortDirection

Возвращает направление сортировки.

SortProperty

Возвращает дескриптор PropertyDescriptor, используемый для сортировки.

SupportsChangeNotification

Возвращает значение, показывающее, происходит ли событие ListChanged при изменениях в списке или при изменении элемента списка.

SupportsSearching

Возвращает значение, показывающее, поддерживает ли список поиск с использованием метода Find(PropertyDescriptor, Object).

SupportsSorting

Возвращает значение, показывающее, поддерживает ли список сортировку.

SyncRoot

Получает объект, с помощью которого можно синхронизировать доступ к коллекции ICollection.

(Унаследовано от ICollection)

Методы

Add(Object)

Добавляет элемент в коллекцию IList.

(Унаследовано от IList)
AddIndex(PropertyDescriptor)

Добавляет дескриптор PropertyDescriptor к индексам, используемым для поиска.

AddNew()

Добавляет новый элемент в список.

ApplySort(PropertyDescriptor, ListSortDirection)

Сортирует список, используя дескриптор PropertyDescriptor и направление ListSortDirection.

Clear()

Удаляет все элементы из коллекции IList.

(Унаследовано от IList)
Contains(Object)

Определяет, содержит ли коллекция IList указанное значение.

(Унаследовано от IList)
CopyTo(Array, Int32)

Копирует элементы коллекции ICollection в массив Array, начиная с указанного индекса массива Array.

(Унаследовано от ICollection)
Find(PropertyDescriptor, Object)

Возвращает индекс строки с данным дескриптором PropertyDescriptor.

GetEnumerator()

Возвращает перечислитель, который осуществляет итерацию по коллекции.

(Унаследовано от IEnumerable)
IndexOf(Object)

Определяет индекс заданного элемента коллекции IList.

(Унаследовано от IList)
Insert(Int32, Object)

Вставляет элемент в список IList по указанному индексу.

(Унаследовано от IList)
Remove(Object)

Удаляет первое вхождение указанного объекта из коллекции IList.

(Унаследовано от IList)
RemoveAt(Int32)

Удаляет элемент IList по указанному индексу.

(Унаследовано от IList)
RemoveIndex(PropertyDescriptor)

Удаляет дескриптор PropertyDescriptor из индексов, используемых для поиска.

RemoveSort()

Удаляет любую сортировку, выполненную с использованием метода ApplySort(PropertyDescriptor, ListSortDirection).

События

ListChanged

Происходит при изменении в списке или в элементе списка.

Методы расширения

Cast<TResult>(IEnumerable)

Приводит элементы объекта IEnumerable к заданному типу.

OfType<TResult>(IEnumerable)

Выполняет фильтрацию элементов объекта IEnumerable по заданному типу.

AsParallel(IEnumerable)

Позволяет осуществлять параллельный запрос.

AsQueryable(IEnumerable)

Преобразовывает коллекцию IEnumerable в объект IQueryable.

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1