我有一些绑定到单个域对象的控件。我必须通过这些对象对数据库实现一些基本的更新操作。我正在使用MVVM Command绑定来更新数据库。问题是取消按钮,它基本上重新加载原始值。我暂时让它从数据库重新加载对象,但不得不很快改变它。
深度复制和手动同步对象不起作用,因为对象不允许轻松克隆。
将UpdateSourceTrigger设置为显式绑定并手动调用UpdateSource似乎是最佳解决方案,但无法找到实现它的方法,因为我无法从视图模型(或命令)直接访问视图控件< / p>
有什么想法吗?
答案 0 :(得分:0)
我记得在使用UpdateSourceTrigger Explicit时使用此article。 后来我遇到了同样的问题(我需要访问视图控件)。那时我发现View Model不是维护WPF View状态的东西,而是一种呈现数据的方式,在这种情况下,你的数据是从数据库中水合的一些实体。
我会有这样的事情:
[WPF视图模型 - &gt;实体视图模型] - &gt;实体VM到实体的转换 - &gt;数据库中。
在ViewModel中使用此功能:
public ObservableCollection<MyEntity> MyEntities
有这个:
public ObservableCollection<MyEntityViewModel> MyEntities
MyEntityViewModel
是Entity
让我再解释一下:WPF视图模型应该呈现VM中包含的数据。这是出于演示目的。如果你有一个非常复杂的人口统计对象图,但你只需要显示姓名,出生日期和Blood Quantum,会发生什么?创建视图模型对象以包装这三个属性比导航对象图更容易。这就是automapper之类的工具存在的原因。
这一切有什么好处?
您无需假冒对象图进行测试
您不会将实体绑定到ViewModel。如果你取消,你不需要重新获得或类似的东西。除非验证成功,否则你不会接触到这些内容。
当然,这可能不适合所有场景,也许你可以想到介于两者之间的东西。
HTH