可观察集合的集合更改

4

关于可观察集合的快速说明。我一直在Silverlight中玩弄这些东西,做一些绑定方面的事情。当从集合中删除或添加时,似乎CollectionChanged事件会触发。我希望当我更改集合内某个类的属性时,会有某些东西触发。集合属性本身已经有了RaisePropertyChanged。我需要对类型类本身进行特殊处理吗?所以如果我有这个:

ObservabelCollection<Person> personcollection... and if I change a property like:

Person p = personcollection.where(e => e.FirstName == "Joey").FirstOrDefault();
if (p != null) { p.FirstName = "Joe"; }

我期望在用户界面上会发生一些事情,但是没有任何变化。
非常感谢您的帮助。
David
4个回答

2

是的,我知道这个存在,但我正在使用位于ViewModelBase类中的“RaisePropertyChange”。我还需要再试试。感谢您的见解。 - David Whitten
@DavidWhitten,Person类继承自ViewModelBase类吗? - Peter Porfy
INotifyPropertyChanged 工作得非常好。我已经设置好了。非常感谢。 - David Whitten

2
我明白你想做什么,但如果我没错的话,Observable Collection 只有在其集合中的项更改时才会引发 INotifyCollectionChanged 事件。这将触发 UI 中的更改。
它不关心其集合中的对象之一上的属性是否更改。您需要在这些对象的属性上实现 INotifyPropertyChanged 接口,以触发对 UI 的更改。
我阅读了这里提供给我的 链接,它为我提供了一些有用的见解。尽管它是针对 WPF 的,但大部分内容仍适用于 Silverlight,因为 Silverlight 本质上是 WPF 的子集。
还有这篇 MSDN 文章也是如此。
 In particular, if you are using OneWay or TwoWay (for example, 
 you want your UI to update when the source properties change dynamically), 
 you must implement a suitable property changed notification mechanism 
 such as the INotifyPropertyChanged interface.

谢谢提供链接。我会再仔细看一下。 - David Whitten

0

INotifyCollectionChanged 用于在集合发生变化时通知某些人。

INotifyPropertyChanged 用于在对象的属性发生变化时通知某些人。

类的对象必须实现该接口并正确触发事件。因此,如果您通过绑定对象进行绑定,则 UI 可以自动更新。

ObservableCollection 正确实现了 INotifyCollectionChanged,但它与其包含的对象无关。因为如果一个对象的属性发生了变化,那不是一个 CollectionChanged 事件,而是集合中具体对象的 PropertyChanged 事件。因此,您必须在 Person 类中实现 INotifyPropertyChanged 接口。


0

ObservableCollection 不会报告集合中对象属性的更改。

要获取该行为,您将需要在每个子对象插入到集合中时挂钩 INotifyPropertyChanged.PropertyChanged 事件。您可以在集合的 CollectionChanged 事件中执行此操作。不要忘记在从集合中删除子元素时取消挂钩事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接