Leggere in inglese

Condividi tramite


IBindingList Interfaccia

Definizione

Fornisce le funzionalità necessarie per supportare scenari semplici e complessi quando si effettua un'associazione a un'origine dati.

public interface IBindingList : System.Collections.IList
Derivato
Implementazioni

Esempio

Nell'esempio seguente viene fornita una semplice implementazione dell'interfaccia IBindingList . La CustomerList classe archivia le informazioni sui clienti in un elenco. In questo esempio si presuppone che sia stata usata la Customer classe che può essere trovata nell'esempio nella IEditableObject classe .

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

Commenti

Questa interfaccia viene implementata dalla DataView classe . L'implementazione di un metodo deve presentare lo stesso comportamento dell'implementazione di tale metodo nella DataView classe.

Quando si chiamano i ApplySort metodi o RemoveSort , è necessario generare un ListChanged evento con l'enumerazione Reset .

Quando si chiama il AddNew metodo, è necessario generare un ListChanged evento con l'enumerazione che contiene l'indice ItemAdded appropriato. La riga aggiunta si trova in uno stato in cui premere ESC su un DataGridView controllo può rimuovere la nuova riga. Generazione dell'evento ListChanged con l'enumerazione una seconda volta in questa riga indica che l'elemento ItemAdded è ora una riga non nello stato "nuovo".

Quando si rimuove un elemento o si chiama il CancelEdit metodo in una nuova riga (se tale riga implementa IEditableObject), è necessario generare un ListChanged evento con l'enumerazione che trasporta l'indice ItemDeleted appropriato.

Proprietà

AllowEdit

Indica se è possibile aggiornare gli elementi dell'elenco.

AllowNew

Indica se è possibile aggiungere elementi all'elenco utilizzando il metodo AddNew().

AllowRemove

Indica se è possibile rimuovere elementi dall'elenco utilizzando il metodo Remove(Object) o il metodo RemoveAt(Int32).

Count

Ottiene il numero di elementi contenuti in ICollection.

(Ereditato da ICollection)
IsFixedSize

Ottiene un valore che indica se IList ha dimensioni fisse.

(Ereditato da IList)
IsReadOnly

Ottiene un valore che indica se IList è di sola lettura.

(Ereditato da IList)
IsSorted

Indica se gli elementi dell'elenco sono ordinati.

IsSynchronized

Ottiene un valore che indica se l'accesso a ICollection è sincronizzato (thread-safe).

(Ereditato da ICollection)
Item[Int32]

Ottiene o imposta l'elemento in corrispondenza dell'indice specificato.

(Ereditato da IList)
SortDirection

Ottiene la direzione dell'ordinamento.

SortProperty

Ottiene l'oggetto PropertyDescriptor che viene utilizzato per l'ordinamento.

SupportsChangeNotification

Indica se viene generato un evento ListChanged quando viene modificato l'elenco o un elemento dell'elenco.

SupportsSearching

Indica se l'elenco supporta la ricerca con il metodo Find(PropertyDescriptor, Object).

SupportsSorting

Indica se l'elenco supporta l'ordinamento.

SyncRoot

Ottiene un oggetto che può essere usato per sincronizzare l'accesso a ICollection.

(Ereditato da ICollection)

Metodi

Add(Object)

Aggiunge un elemento a IList.

(Ereditato da IList)
AddIndex(PropertyDescriptor)

Consente di aggiungere l'oggetto PropertyDescriptor agli indici utilizzati per la ricerca.

AddNew()

Consente di aggiungere un nuovo elemento all'elenco.

ApplySort(PropertyDescriptor, ListSortDirection)

Ordina l'elenco in base a un oggetto PropertyDescriptor e a un oggetto ListSortDirection.

Clear()

Rimuove tutti gli elementi da IList.

(Ereditato da IList)
Contains(Object)

Stabilisce se IList contiene un valore specifico.

(Ereditato da IList)
CopyTo(Array, Int32)

Copia gli elementi di ICollection in Array a partire da un particolare indice Array.

(Ereditato da ICollection)
Find(PropertyDescriptor, Object)

Consente di restituire l'indice della riga che presenta il dato oggetto PropertyDescriptor.

GetEnumerator()

Restituisce un enumeratore che consente di eseguire l'iterazione di una raccolta.

(Ereditato da IEnumerable)
IndexOf(Object)

Determina l'indice di un elemento specifico in IList.

(Ereditato da IList)
Insert(Int32, Object)

Inserisce un elemento in IList in corrispondenza dell'indice specificato.

(Ereditato da IList)
Remove(Object)

Rimuove la prima occorrenza di un oggetto specifico da IList.

(Ereditato da IList)
RemoveAt(Int32)

Rimuove l'elemento IList in corrispondenza dell'indice specificato.

(Ereditato da IList)
RemoveIndex(PropertyDescriptor)

Consente di rimuovere l'oggetto PropertyDescriptor dagli indici utilizzati per la ricerca.

RemoveSort()

Consente di rimuovere qualsiasi ordinamento applicato utilizzando il metodo ApplySort(PropertyDescriptor, ListSortDirection).

Eventi

ListChanged

Si verifica quando viene modificato l'elenco o un elemento dell'elenco.

Metodi di estensione

Cast<TResult>(IEnumerable)

Esegue il cast degli elementi di un oggetto IEnumerable nel tipo specificato.

OfType<TResult>(IEnumerable)

Filtra gli elementi di un oggetto IEnumerable in base a un tipo specificato.

AsParallel(IEnumerable)

Consente la parallelizzazione di una query.

AsQueryable(IEnumerable)

Converte un oggetto IEnumerable in un oggetto IQueryable.

Si applica a

Prodotto Versioni
.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