2011-03-28 121 views
0

我有一些绑定到单个域对象的控件。我必须通过这些对象来实现对数据库的一些基本更新操作。我正在使用MVVM命令绑定来更新数据库。问题是基本上重新加载原始值的取消按钮。我暂时使它从数据库重新加载对象,但必须尽快更改它。WPF数据绑定取消操作

由于对象不允许轻松克隆,因此深度复制和手动同步对象不起作用。

将UpdateSourceTrigger设置为显式绑定并手动调用UpdateSource似乎是最佳解决方案,但无法找到实现它的方法,因为我没有直接访问视图控件的视图模型(或命令)

任何想法?

回答

0

我记得使用这个article时,与UpdateSourceTrigger显式挣扎。 后来我遇到了同样的问题(我需要访问视图控件)。那是当我发现View Model不是维护WPF视图状态的东西,而且是一种呈现数据的方式,在这种情况下,您的数据是来自数据库的一些实体。

我想有这样的事情:

[WPF视图模型 - >实体视图模型] - >实体VM到实体翻译 - >数据库。

的这Inestead在您的视图模型:

public ObservableCollection<MyEntity> MyEntities

这样:

public ObservableCollection<MyEntityViewModel> MyEntities

MyEntityViewModel是一个VM我Entity

让我解释多一点:WPF视图模型应该呈现V中包装的数据M.这是为了演示目的。如果您有相当复杂的人口统计对象图表,但您只需要显示姓名,出生日期和Blood Quantum,会发生什么情况?它更容易创建一个视图模型对象来包装这三个属性,而不是导航对象图。这就是为什么存在像automapper这样的工具。

这一切的好处是什么?

  • 你不需要伪装的对象图做你的测试

  • 你不配合你的实体的视图模型。如果你取消了,你不需要重新获得或类似的东西。除非验证成功,否则您不会碰到物体。

当然,这可能不适合所有情况,也许你可以考虑两者之间的事情。

HTH