Silverlight:无法通过INPC强制更新绑定到集合?

时间:2012-01-19 06:13:00

标签: silverlight

假设我的ListBox绑定到我的视图模型上的可观察集合,其中数据项是一个具有NameValue属性的简单类。 / p>

当我从视图模型集合中添加或删除项目时,ListBox会自动更新。

但是,如果我更改数据项的名称,我也希望ListBox也刷新,因此我在视图模型属性中引发了属性更改,该属性在我在代码中更新名称后公开了observable集合。但是ListBox不会更新。

就好像绑定说的那样,你给我的对象(集合本身)与我拥有的对象相同,所以它没有真正改变,是吗?愚蠢的程序员,告诉我在不需要时刷新!

我发现只有几种方法可以解决这个问题:

  • 从集合本身提出一个显式的重置通知(需要ObservableCollection的子类化来执行此操作)
  • 使用新的可观察集合重新创建列表,然后引发属性更改 - 集合对象现在不同,因此绑定更新

这两种方式都不是理想的,虽然第一种方法绝对是可取的 - 确实不应该让列表框更新很难!

任何人都可以解释为什么绑定以这种方式工作,并且是否有任何方法可以更改行为,以便绑定将始终更新属性更改通知,无论源是否已更改?

1 个答案:

答案 0 :(得分:1)

我觉得ObservableCollection中的项目没有实现INotifyPropertyChanged。您需要执行此操作,以便在更改集合中项目的Name属性时,更新UI。根据您的描述,框架和绑定集合的工作方式与应该完全一致。