【问题标题】:Silverlight: Can't force update of binding to collection via INPC?Silverlight:无法通过 INPC 强制更新绑定到集合?
【发布时间】:2012-01-19 06:12:59
【问题描述】:

假设我有一个ListBox,它绑定到我的视图模型上的一个可观察集合,其中数据项是一个简单的类,它有一个Name 和一个Value 属性。

当我在视图模型集合中添加或删除项目时,ListBox 会按照我的预期自动更新。

但是,如果我更改数据项的名称,我希望 ListBox 也能刷新,因此我在代码中更新名称后,为公开可观察集合的视图模型属性提出属性更改。但是 ListBox 不会更新。

就好像绑定在说,嗯,你给我的对象(集合本身)和我最后一个一样,所以它并没有真正改变,是吗?愚蠢的程序员,让我在不需要的时候刷新!

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

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

这两种方法都不理想,尽管第一种方法绝对更可取 - 更新列表框真的不应该这么难!

谁能解释为什么绑定以这种方式工作,以及是否有任何方法可以更改行为,以便绑定始终在属性更改通知上更新,而不管源是否已更改?

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    在我看来,您的 ObservableCollection 中的项目没有实现 INotifyPropertyChanged。您需要这样做,以便当您更改集合中某个项目的Name 属性时,UI 会更新。根据您的描述,框架和您绑定的集合完全可以正常工作。

    【讨论】:

      猜你喜欢
      • 2011-02-09
      • 1970-01-01
      • 2011-04-07
      • 2010-11-20
      • 2011-01-02
      • 2012-06-14
      • 1970-01-01
      • 2021-08-16
      • 2023-03-05
      相关资源
      最近更新 更多