WPF绑定依赖物业的ObservableCollection
问题描述:
我有,有一个依赖属性的用户控件:WPF绑定依赖物业的ObservableCollection
public static readonly DependencyProperty MasterListProperty = DependencyProperty.Register("MasterList", typeof(IEnumerable<MyObject>), typeof(MyControl), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(MasterListChanged)));
我的目标实现INotifyPropertyChanged。我试图将这个依赖属性绑定到该对象的ObservableCollection
。但是我没有得到任何更新,当我添加一个项目到我的根集合,这个依赖属性绑定。
下面是被这种依赖属性绑定到我的收藏控制:我试图把Mode=TwoWay
,仍然没有得到任何更新我的依赖属性
<image:MyControl MasterList="{Binding Path=SourceList, UpdateSourceTrigger=PropertyChanged}"></image:MyControl>
。我有一个绑定到依赖项属性数的工具提示,它会被更新,但是我的MasterListChanged
事件没有被激发。
任何想法?
答
但我没有得到任何更新,当我将项目添加到我的根集合,这种依赖属性绑定到。
你不应该。一个依赖属性的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...
}
你有没有改变'SourceList'?如果MasterListChanged不叫的话,我认为答案是当MyObject的被添加到的ObservableCollection“不” – ASh
你PropertyChangedCallback不会被调用。当依赖属性被设置为一个新的IEnumerable(的ObservableCollection )它只会被调用。 –
mm8
@ASh当我添加一个项目,我将它SOURCELIST – James