3

以下のようなクラスがある場合:

public class MyClass : INotifyPropertyChanged
{
    private BindingList<String> myList;

    public BindingList<String> MyList
    {
        get { return myList; }
        set
        {
            if (myList == value) return;
            myList = value;
            OnPropertyChanged("MyList");
        }
    }
}

次のイベント ハンドラーをセットアップする必要がありますか。

myList.ListChanged += (object sender, ListChangedEventArgs e) => OnPropertyChanged("MyList");

それとも検出されますか?BindingList クラスは、テンプレート化された型の INotifyPropertyChanged インターフェイスを検索するため、ListChanged イベントを発生させる必要があるかどうかを判断できることはわかっていますが、それ以外の方法で動作するかどうかはわかりません。

4

2 に答える 2

2

myListフィールドはクラス内にカプセル化されます。フィールドが自動的に「バブルアウト」することはありません。myListクラスのインスタンスにバインドするものは、作成したイベントハンドラーのようなものでそれらを伝播しない限り、変更について認識しません。ただし、MyListプロパティにバインドするものはオブジェクトへの直接参照を取得しているBindingListため、によって発生した通知が表示されmyListます。

于 2012-11-07T22:18:49.027 に答える
1

このINotifyPropertyChangeインターフェースは、クラス内のプロパティを変更したときに通知するためのものです。コレクションアイテムが変更されたときに通知するには、を使用する必要がありますINotifyCollectionChanged

于 2012-11-07T22:18:48.263 に答える