2017-08-15 3 views
0

に依存プロパティをバインド私は依存関係プロパティを持つユーザーコントロールを持っている:WPFはのObservableCollection

public static readonly DependencyProperty MasterListProperty = DependencyProperty.Register("MasterList", typeof(IEnumerable<MyObject>), typeof(MyControl), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(MasterListChanged))); 

私のオブジェクトがINotifyPropertyChangedのを実装しています。この依存関係プロパティをそのオブジェクトのObservableCollectionにバインドしようとしています。しかし、私は、この依存関係プロパティがバインドされているアイテムをルートコレクションに追加するときに、何の更新も得られません。

ここに私のコレクションにこの依存関係プロパティを結合され、コントロールの:

<image:MyControl MasterList="{Binding Path=SourceList, UpdateSourceTrigger=PropertyChanged}"></image:MyControl> 

私はMode=TwoWayを入れて試しても私の依存関係プロパティに任意のアップデートを得ることはありません。私は、依存性プロパティのカウントにバインドされたツールチップを持っていますが、私のMasterListChangedイベントは起動されませんが、更新されます。

アイデア?

+0

は、あなたがこれまで 'SourceList'を変更できますでしょうか? MasterListChangedが呼び出されていない場合、答えは「いいえ」と答えます – ASh

+2

MyObjectがObservableCollectionに追加されたときにPropertyChangedCallbackが呼び出されません。これは、依存関係プロパティが新しいIEnumerable (ObservableCollection )に設定されている場合にのみ呼び出されます。 – mm8

+0

@AShアイテムを追加するときに、SourceList – James

答えて

4

ただし、この依存関係プロパティがバインドされているルートコレクションにアイテムを追加すると、更新が反映されません。

あなたはそうではありません。依存関係プロパティのPropertyChangedCallbackは、依存関係プロパティ自身が新しい値に設定されている場合にのみ呼び出されます。ソースコレクションにMyObjectを追加すると呼び出されません。あなたは何ができるか

は、アイテムが追加またはそれから削除されたときに何かをしたい場合は、コレクションのためにCollectionChangedイベントを処理するために、例えば:

private static void MasterListChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    var newCol = e.NewValue as INotifyCollectionChanged; 
    if (newCol != null) 
    { 
     newCol.CollectionChanged += Coll_CollectionChanged; 
    } 

    var oldCol = e.OldValue as INotifyCollectionChanged; 
    if (oldCol != null) 
    { 
     oldCol.CollectionChanged -= Coll_CollectionChanged; 
    } 
} 

private static void Coll_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
{ 
    //do something... 
} 
+1

キャストステートメントを 'e.NewValue as INotifyCollectionChanged'に変更することをお勧めしますと 'e.OldValue as INotifyCollectionChanged' – Ada

+0

@ SharadaGururajそれの背後にある理由は何ですか? – James

+0

INotifyCollectionChangedはObservableCollection よりも具体的ではありません。つまり、同じコードが複数の型で動作します。私は答えを更新しました。 – mm8

関連する問題