可观察集合中的更改不反映在数据网格中的项目

时间:2014-02-26 16:50:23

标签: wpf mvvm observablecollection

我正在使用可观察集合作为WPF中数据网格的数据源。

我的数据网格中有大约20列。

如果我对特定单元格的值进行任何更改,我无法在UI中看到相同的内容.Cell显示相同的旧值。如果单击该单元格,则会显示最新值。

我将用一个例子来解释这个。 假设我在可观察集合名称和年龄中有两个属性。 如果我从viewmodel向observable集合添加一些4或5列,则会在UI中显示相同的内容。如果我在viewmodel中更改特定行中Age的值,则在grid中不会显示最新值。当我显示时,将显示最新值点击那个单元格。

有人能告诉我们需要做些什么才能在UI中反映出这些变化吗?

1 个答案:

答案 0 :(得分:7)

ObservableCollection继承INotifyCollectionChanged,以便视图可以在添加或删除元素时更新,以及INotifyPropertyChanged,以便在刷新(设置)整个列表时视图可以更新。

但是,一旦在集合容器(如数据网格)中有来自该可观察集合的项目,该行的数据上下文就成为源对象(即,observable集合中包含的对象)。如果此源对象未实现INotifyPropertyChanged,则对其数据的更改将不会传播到UI。

基本上,ObservableCollection聚合的任何对象也需要实现INotifyPropertyChanged。