İngilizce dilinde oku

Aracılığıyla paylaş


IBindingList Arabirim

Tanım

Bir veri kaynağına bağlanırken hem karmaşık hem de basit senaryoları desteklemek için gereken özellikleri sağlar.

C#
public interface IBindingList : System.Collections.IList
Türetilmiş
Uygulamalar

Örnekler

Aşağıdaki örnek, arabiriminin IBindingList basit bir uygulamasını sağlar. sınıfı müşteri CustomerList bilgilerini bir listede depolar. Bu örnekte, sınıfındaki Customer örnekte bulunabilecek IEditableObject sınıfı kullandığınız varsayılır.

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

Açıklamalar

Bu arabirim sınıfı tarafından DataView uygulanır. Bir yöntemin uygulanması, sınıftaki bu yöntemin DataView uygulanmasıyla aynı davranışı göstermelidir.

veya RemoveSort yöntemlerini çağırdığınızdaApplySort, numaralandırması Reset ile bir ListChanged olay tetiklemelisiniz.

yöntemini çağırdığınızdaAddNew, uygun dizini taşıyan numaralandırma ile ItemAdded bir ListChanged olay tetiklemelisiniz. Eklenen satır, bir denetimde ESC tuşuna basıldığında yeni satırın kaldırılabildiği bir DataGridView durumdadır. Bu satırda ListChanged numaralandırma ile ItemAdded olayı ikinci kez yükseltmek, öğenin artık "yeni" durumda olmayan bir satır olduğunu gösterir.

Bir öğeyi kaldırdığınızda veya yeni bir satırda yöntemini çağırdığınızda CancelEdit (bu satır uygularsaIEditableObject), uygun dizini taşıyan sabit listesiyle ItemDeleted bir ListChanged olay tetiklemelisiniz.

Özellikler

AllowEdit

Listedeki öğeleri güncelleştirip güncelleştiremeyeceğinizi alır.

AllowNew

kullanarak AddNew()listeye öğe ekleyip ekleyemeyeceğinizi alır.

AllowRemove

veya RemoveAt(Int32)kullanarak Remove(Object) öğeleri listeden kaldırıp kaldıramayacağınızı alır.

Count

ICollection içindeki öğe sayısını alır.

(Devralındığı yer: ICollection)
IsFixedSize

değerinin sabit bir boyuta sahip olup olmadığını IList belirten bir değer alır.

(Devralındığı yer: IList)
IsReadOnly

IList öğesinin salt okunur olup olmadığını belirten bir değer alır.

(Devralındığı yer: IList)
IsSorted

Listedeki öğelerin sıralanıp sıralanmadığını alır.

IsSynchronized

erişimin ICollection eşitlenip eşitlenmediğini belirten bir değer alır (iş parçacığı güvenli).

(Devralındığı yer: ICollection)
Item[Int32]

Belirtilen dizindeki öğeyi alır veya ayarlar.

(Devralındığı yer: IList)
SortDirection

Sıralamanın yönünü alır.

SortProperty

PropertyDescriptor Sıralama için kullanılan öğesini alır.

SupportsChangeNotification

Bir olayın liste değiştiğinde mi yoksa listedeki bir öğe değiştiğinde mi ListChanged tetikleneceğini alır.

SupportsSearching

Listenin yöntemini kullanarak Find(PropertyDescriptor, Object) aramayı destekleyip desteklemediğini alır.

SupportsSorting

Listenin sıralamayı destekleyip desteklemediğini alır.

SyncRoot

erişimi ICollectioneşitlemek için kullanılabilecek bir nesnesi alır.

(Devralındığı yer: ICollection)

Yöntemler

Add(Object)

öğesine bir öğe IListekler.

(Devralındığı yer: IList)
AddIndex(PropertyDescriptor)

PropertyDescriptor arama için kullanılan dizinlere öğesini ekler.

AddNew()

Listeye yeni bir öğe ekler.

ApplySort(PropertyDescriptor, ListSortDirection)

Listeyi ve PropertyDescriptorListSortDirectionöğesine göre sıralar.

Clear()

öğesinden IListtüm öğeleri kaldırır.

(Devralındığı yer: IList)
Contains(Object)

öğesinin IList belirli bir değer içerip içermediğini belirler.

(Devralındığı yer: IList)
CopyTo(Array, Int32)

öğesinin ICollection öğelerini belirli Array bir dizinden başlayarak öğesine Arraykopyalar.

(Devralındığı yer: ICollection)
Find(PropertyDescriptor, Object)

Verilen PropertyDescriptoröğesini içeren satırın dizinini döndürür.

GetEnumerator()

Bir toplulukta tekrarlanan bir numaralandırıcı döndürür.

(Devralındığı yer: IEnumerable)
IndexOf(Object)

içindeki belirli bir öğenin dizinini IListbelirler.

(Devralındığı yer: IList)
Insert(Int32, Object)

Belirtilen dizinde öğesine IList bir öğe ekler.

(Devralındığı yer: IList)
Remove(Object)

belirli bir nesnenin ilk oluşumunu öğesinden IListkaldırır.

(Devralındığı yer: IList)
RemoveAt(Int32)

Belirtilen dizindeki IList öğeyi kaldırır.

(Devralındığı yer: IList)
RemoveIndex(PropertyDescriptor)

arama için kullanılan dizinlerden öğesini PropertyDescriptor kaldırır.

RemoveSort()

kullanılarak ApplySort(PropertyDescriptor, ListSortDirection)uygulanan tüm sıralamaları kaldırır.

Ekinlikler

ListChanged

Liste değiştiğinde veya listedeki bir öğe değiştiğinde gerçekleşir.

Uzantı Metotları

Cast<TResult>(IEnumerable)

öğesinin IEnumerable öğelerini belirtilen türe atar.

OfType<TResult>(IEnumerable)

Öğesinin IEnumerable öğelerini belirtilen türe göre filtreler.

AsParallel(IEnumerable)

Sorgunun paralelleştirilmesini etkinleştirir.

AsQueryable(IEnumerable)

bir IEnumerable öğesini öğesine IQueryabledönüştürür.

Şunlara uygulanır

Ürün Sürümler
.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