我不知道你是如何做这样的事情的。假设,我们有修改树的MVVM CRUD应用程序(例如,菜单结构)。我们有一个包含菜单项和两个视图的视图模型:第一个为TreeView
,第二个为DataForm
。主要问题是:当选择更改时,自动取消DataForm中的更改
DataForm
无法处理 分层数据。- 根据菜单项中选择的
TreeView
的DataForm
应(菜单项 与儿童或不例如)显示不同的一组 字段。
我已经结束了以下。视图模型有3个领域:
Items
- 有他们自己的 收集Children
为 构建分层数据源MenuItem
对象的集合。SelectedItem
- 当前选择MenuItem
在TreeView
。- -
EditViewModel
对象基本上具有两个 后代:MenuItemEditViewModel
和LeafMenuItemEditViewModel
。 当SelectedItem
被更改时,此属性被自动设置为 。它的 实际类型是从SelectedItem.Children
空虚推断出来的。
TreeView
绑定到Items
和SelectedItem
。在这种情况下,不需要使用DataForm
来维护货币(而不是当前项目由TreeView
设置),也不需要负责创建和删除项目。这就是为什么我决定只绑定其CurrentItem
查看模型的(ItemsSource
是未绑定)。其AutoCommit
设置为False
(当它是True
和ItemsSource
未绑定时,当您在TreeView
中选择不同的项目时,所有当前项目更改将被复制到新选择的项目,这并不好)。 DataForm
字段是自动生成的。
显然,现在如果我们选择在TreeView
一个项目,然后让在DataForm
一些变化,并尝试在TreeView
,我们将得到著名
无法更改货币时选择不同的项目一个项目 有验证错误,或正在编辑 ,并且AutoCommit为false。设置 的ItemsSource到ICollectionView到 管理货币,而不是
在这种情况下,我想DataForm
隐式地放弃所有更改。有一种解决方法,在之前调用DataForm.CancelEdit()
所选项目被更改(通常是类似PreviewSelectionChanged
或BeforeSelectionChanged
的事件)。但它不是MVVM的方式,因为TreeView
和DataForm
在完全不同的视图中定义(读取:不可接受)。
是否有像AutoCancel这样强制DataForm
取消其更改CurrentItem
更改?也许有人从开发团队可以回答?或者你会如何处理这样的问题?
错误消息很明显:您需要坚持使用美元。正在编辑项目并且AutoCommit为false时,您无法切换到欧元! :) – Skrymsli 2011-07-27 05:25:59