簡體   English   中英

如何檢測 BindingList 中項目屬性的更改<t> ?</t>

[英]How can I detect changes to item properties in the BindingList<T>?

我有一個具有屬性 A 和 B 的自定義 class Foo。我想在數據綁定控件中顯示它。

我創建了一個 class Foos: BindingList<Foo>

為了更新 Foos class 的一些內部屬性,我需要通知列表中項目的屬性更改(我可以處理插入、刪除等)。 您將如何實現該功能?

我應該從支持它的框架中的一些 object 繼承 Foo 嗎? 我想我可以創建事件來通知我是否發生變化,但應該這樣做嗎? 或者框架中有一些模式對我有幫助嗎?

Foo 應該實現INotifyPropertyChangedINotifyPropertyChanging接口。

public void Foo : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(String info)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(info));
        }
    }

    private int _someValue;
    public int SomeValue
    {
        get { return _someValue; }
        set { _someValue = value; NotifyPropertyChanged("SomeValue"); }
    }
}

BindingList應該自動連接到您的事件處理程序,並且您的 GUI 現在應該在您設置 class 調用PropertyChanged事件處理程序時更新。

[編輯添加:] 此外, BindingList class 公開兩個事件,當集合被添加或修改時通知您:

public void DoSomething()
{
    BindingList<Foo> foos = getBindingList();
    foos.ListChanged += HandleFooChanged;
}

void HandleFooChanged(object sender, ListChangedEventArgs e)
{
    MessageBox.Show(e.ListChangedType.ToString());
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM