我有一个使用INotifyPropertyChanged
的类,并且有一个绑定到网格的List。每次该对象更改时,它都会更新网格中的值。但是出于历史原因,我想将该对象添加到集合/列表并绑定到历史网格以显示所有更改。但是我尝试过的每个列表似乎都订阅了INotifyPropertyChanged
,所以我只能在历史记录网格中获得相同数量的项目。
是否有未订阅INotifyPropertyChanged
的列表/集合?
由于
答案 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=OneTime
。 http://msdn.microsoft.com/en-us/magazine/cc163299.aspx#S3