【发布时间】:2012-01-19 06:12:59
【问题描述】:
假设我有一个ListBox,它绑定到我的视图模型上的一个可观察集合,其中数据项是一个简单的类,它有一个Name 和一个Value 属性。
当我在视图模型集合中添加或删除项目时,ListBox 会按照我的预期自动更新。
但是,如果我更改数据项的名称,我希望 ListBox 也能刷新,因此我在代码中更新名称后,为公开可观察集合的视图模型属性提出属性更改。但是 ListBox 不会更新。
就好像绑定在说,嗯,你给我的对象(集合本身)和我最后一个一样,所以它并没有真正改变,是吗?愚蠢的程序员,让我在不需要的时候刷新!
我发现只有几种方法可以解决这个问题:
- 从集合本身发出显式重置通知(需要 ObservableCollection 的子类来执行此操作)
- 使用新的可观察集合重新创建列表,然后引发属性更改 - 集合对象现在不同,因此绑定更新
这两种方法都不理想,尽管第一种方法绝对更可取 - 更新列表框真的不应该这么难!
谁能解释为什么绑定以这种方式工作,以及是否有任何方法可以更改行为,以便绑定始终在属性更改通知上更新,而不管源是否已更改?
【问题讨论】:
标签: silverlight