有没有订阅INotifyPropertyChanged的集合?

有没有订阅INotifyPropertyChanged的集合?

问题描述:

我有一个班级,使用INotifyPropertyChanged并有一个列表绑定到网格。每次对象更改时,都会更新网格中的值。然而由于历史原因,我想将该对象添加到集合/列表并绑定到历史网格以显示所有更改。然而,我尝试过的每个列表似乎都订阅了INotifyPropertyChanged,所以我只能在我的历史记录网格中获得相同数量的项目。有没有订阅INotifyPropertyChanged的集合?

有没有订阅INotifyPropertyChanged的列表/集合?

感谢

+1

很难理解你在这里说的究竟是什么。就我所知,列表本身不绑定到INotifyPropertyChanged。你能给一些示例代码吗? – 2011-01-31 16:52:34

+0

我不是100%确定我遵循你想要的,但是如果你想要绑定列表的旧版本,那么为什么不在你希望记录历史的时间克隆呢? – Chris 2011-01-31 16:52:57

如果您的列表是对类的引用列表,则需要对整个列表执行“深层克隆”以维护历史副本。否则,列表内容的副本仍然是对正在变更的“实时”对象的引用。这样做将需要的代码,如:

// This requires a way to "Clone" your object... 
List<YourClass> listCopy = originalList.Select(item => item.Clone()).ToList(); 

如果列表中包含的值类型(结构),你可以创建一个新的List<YourType>并复制原始的元素上。

// If your type is a value type, you can just copy the list directly... 
var listCopy = originalList.ToList(); 

另外 - 这与INotifyPropertyChanged无关。列表本身与PropertyChanged事件无关。

考虑您的使用结合Mode=OneTimehttp://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S3