WPF绑定依赖属性到ObservableCollection

时间:2017-08-15 14:28:12

标签: c# wpf observablecollection dependency-properties

我有一个具有依赖项属性的用户控件:

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但仍然没有获得我的Dependency属性的任何更新。我有一个工具提示,它绑定到依赖项属性计数并且会更新,但我的MasterListChanged事件不会被触发。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

  

然而,当我将一个项目添加到我的根集合中时,我没有得到任何更新,这个依赖项属性被绑定到了。

你不应该。仅当依赖项属性本身设置为新值时,才会调用依赖项属性的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... } 事件,例如:

plt.figure