我想知道你是怎么做这样的事情的。假设,我们有修改树(例如菜单结构)的 MVVM CRUD 应用程序。我们有一个带有菜单项的视图模型和两个视图:第一个带有 a TreeView,第二个带有 a DataForm。主要问题是:
DataForm无法处理分层数据。- 根据在 中选择的菜单项
TreeView应该DataForm显示不同的字段集(例如对于有子项或没有子项的菜单项)。
我结束了以下内容。视图模型有 3 个字段:
Items—MenuItem对象的集合,它们有自己的Children集合,用于构建分层数据源。SelectedItem— 当前MenuItem在TreeView.EditedItem—EditViewModel基本上有两个后代的对象:MenuItemEditViewModel和LeafMenuItemEditViewModel. 此属性在SelectedItem更改时自动设置。SelectedItem.Children它的实际类型是从空虚中推断出来的 。
TreeView必然Items和SelectedItem。DataForm在这种情况下不需要维护货币(而是当前项目由 设置TreeView),也不负责创建和删除项目。这就是为什么我决定只将其绑定CurrentItem到视图模型的EditedItem(ItemsSource未绑定)。它AutoCommit设置为False(当它是True并且ItemsSource未绑定时,当您在 中选择不同的项目时,所有当前项目更改都会复制到新选择的项目TreeView,这不太好)。DataForm字段是自动生成的。
显然,现在如果我们在 中选择一个项目,TreeView然后DataForm在TreeView
当项目存在验证错误或正在编辑且 AutoCommit 为 false 时,无法更改货币。将 ItemsSource 设置为 ICollectionView 以改为管理货币
在这种情况下,我想DataForm隐式丢弃所有更改。DataForm.CancelEdit()在更改所选项目之前有一个解决方法可以调用TreeView(通常是类似PreviewSelectionChangedor的事件BeforeSelectionChanged)。但这不是 MVVM 方式,因为TreeView和DataForm是在完全不同的视图中定义的(阅读:不可接受)。
是否有类似 AutoCancel 的东西DataForm在更改时强制取消更改CurrentItem?也许开发团队的人可以回答?或者你会如何处理这样的问题?