我不知道它是否有帮助,但通常在ViewModel中,我声明IList
或另一个不太具体的接口作为属性类型而不是特定的接口。
然后我可以将准所有集合和列表绑定到这个propery。
虽然属性设置,我检查它是否实现INotifyPropertyChanged
,如果是,我附加一个CollectionChanged-EventHandler。当属性发生新变化时,我从旧的INotifyPropertyChanged
中删除EventHandler(如果是)。
这样做的缺点是ViewModel必须准备好查看其他类型而不是预期的对象。但这通常是一项简单的工作。
void YourDPValueChanged(DependencyPropertyChangedEventArgs e) {
INotifyCollectionChanged newCollection = e.NewValue as INotifyCollectionChanged;
INotifyCollectionChanged oldCollection = e.OldValue as INotifyCollectionChanged;
if (null != newCollection) {
newCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(Collection_CollectionChanged);
}
if (null != oldCollection) {
oldCollection.CollectionChanged -= new NotifyCollectionChangedEventHandler(Collection_CollectionChanged);
}
来源
2010-09-09 11:26:48
HCL
Thx为您的关注。我试过了,但它似乎没有帮助我。我通常也使用IList,但我相信问题是列表中包含的对象的类型。我希望对象列表可以有一个绑定到它的任何列表,但只有当我将一个完全相同类型的集合绑定到它时才会触发依赖项属性 - 当使用IList时也是如此。 – stiank81 2010-09-09 11:41:50
@ stiank81:这看起来像这是绑定的问题:ObservableCollection implements Collection 并且这实现了IList。因此它不能成为包含类型的问题。我是否了解最初的设计权限:您的ViewModel具有此IList属性,并且您从View an ObservableCollection 到它。对? –
HCL
2010-09-09 11:50:32
我的ViewModel有一个ObservableCollection,在我看来我有一个属性ObservableCollection