1

:その一環としてWhy NOT BindingList in WPFItemsControl.ItemsSourceが変更されたときにUIが更新される原因は何ですか?私はこの質問次するBindingListとのObservableCollectionの違いを検討していた

を、私はリスト、コレクション、のObservableCollectionとするBindingList含む様々なタイプにItemsControlにののItemsSourceを結合テスト。

ObservableCollectionまたはBindingListのいずれかが変更されたときにインターフェイスが更新されたのは驚きましたが、それ以外のものは更新されませんでした。だから、それを聞いているWPFは何を更新するのですか? BindingListはそれを実装していないため、これまで考えていたように、INotifyCollectionChangedイベントにすることはできません。 Bemused。

答えて

1

バインディングリストは、次のようになります。

public class BindingList<T> : Collection<T>, IBindingList, IList, ICollection, IEnumerable, ICancelAddNew, IRaiseItemChangedEvents 
    { 

IRaiseItemChangedEvents

は、オブジェクトクラスがListChangedイベント にプロパティ変更イベントを変換していることを示しています。 BindingList自体には、WPFがリッスンする必要があるイベントであるイベントがあります。

それはIRaiseItemChangedEventsのように見えるという事実が無視されている場合は

が、

// subscribe to change notifications 
    private void SubscribeToChanges() 
    { 
     if (InternalList.SupportsChangeNotification) 
     { 
      InternalList.ListChanged += new ListChangedEventHandler(OnListChanged); 
     } 
    } 

が含まれていBindingListCollectionView

/// <summary> 
    /// Constructor 
    /// </summary> 
    /// <param name="list">Underlying IBindingList</param> 
    public BindingListCollectionView(IBindingList list) 
     : base(list) 
    { 
     InternalList = list; 

のようなコンストラクタがあります私はあなたがDotPeekのホールドを取得し、自分の目で確かめてくださいお勧めします。

+0

ありがとう、それは役に立つ - 私はチャンスを得るときDotPeekを見てみましょう。その質問に答えるために、WPFは2つのクラスを別々に扱い、それぞれに対応できると思いますか、それとも両方に当てはまるメカニズムがありますか? –

+1

いいえ、ソースタイプに応じてIBindingListおよびその他のCollectionView型の実装をラップするBindingListCollectionViewを作成します。 – Phil

関連する問題