是否有一个不订阅INotifyPropertyChanged的集合?

时间:2011-01-31 16:48:51

标签: c# .net .net-3.5 c#-3.0 inotifypropertychanged

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

是否有未订阅INotifyPropertyChanged的列表/集合?

由于

2 个答案:

答案 0 :(得分:3)

如果您的列表是对类的引用列表,则需要对整个列表进行“深度克隆”以保留历史副本。否则,列表内容的副本仍将是对正在更改的“实时”对象的引用。这样做需要以下代码:

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

如果列表包含值类型(struct),您只需创建一个新的List<YourType>并复制原始元素。

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

此外 - 这与INotifyPropertyChanged无关。列表本身不会对PropertyChanged事件做任何事情。

答案 1 :(得分:0)

考虑在绑定中使用Mode=OneTimehttp://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S3