我有一个具有依赖项属性的用户控件:
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
事件不会被触发。
有什么想法吗?
答案 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