【发布时间】:2012-03-29 11:03:35
【问题描述】:
我在使用 DomainContext.RejectChanges() 并在 UI 中反映回滚时遇到问题。这是我的场景。
- 我生成了一个 模型(实体)用于 RIA 服务(我将其称为 Foo)
- 我有一个 ViewModel,它包装了 Foo 并对其进行了扩展(我将其称为 FooViewModel)
- 我有一个 View,它使用 Binding 来显示和使用 FooViewModel 更新数据
- 我有一个“外部”ViewModel,其中包含 FooViewModels 的 ObservableCollection
- “外部”View 有一个绑定到 ObservableCollection 的列表框
所以基本上在一个屏幕上有一个 FooViewModels 列表框...当您选择一个项目时,会显示一个子窗口来编辑该特定的 FooViewModel。 FooViewModel 为列表框和子窗口提供服务。
编辑工作得很好。子窗口中的更改立即反映在列表框中,因为我在更新视图模型属性时调用 RaisePropertyChanged()。
但是,如果我执行 DomainContext.RejectChanges()...基础实体会回滚(所有更改都按预期还原)...但是 FooViewModel不知道此更改已发生,因此 UI 未更新。如果我在第一个屏幕上重新选择列表框中的项目,子窗口将显示回滚更改(这是我想要的)。但是列表框仍然没有更新。
当我拒绝更改时,如果我为我更改的字段kludge RaiseProperyChanged()...UI 列表框会更新。
当底层实体被拒绝时,如何让 UI 更新?在不跟踪视图模型的哪些属性被回滚的情况下,我该怎么做?必须有一种简单的方法来完成我只是想念的。
【问题讨论】:
-
您的 FooViewModel 属性是否直接映射到 Foo 实体属性?例如。相同的名称,相同的类型?
-
是的。底层 Foo.MyProperty 公开为 FooViewModel.MyProperty。 FooViewModel 上确实有其他提供视图的属性....但这些都是“额外的”。
标签: c# silverlight mvvm wcf-ria-services silverlight-5.0