我是 WPF 和 MVVM 的新手,我正在开发一个使用这两者的应用程序。该应用程序类似于 Windows 资源管理器,因此请考虑具有带菜单 (ShellViewModel)、树控件 (TreeViewModel) 和列表控件 (ListViewModel) 的主窗口的应用程序。我想实现Edit -> Delete之类的菜单项,它会删除当前选中的项(可能在树中或列表中)。
我正在使用 Josh Smith 的 RelayCommand,将 menuitem 绑定到 ShellViewModel 中的 DeleteItemCommand 很容易。然而,似乎实现 DeleteItemCommand 需要在 ShellViewModel 和两个子视图模型(TreeViewModel 和 ListViewModel)之间进行一些相当紧密的耦合,以跟踪焦点/选择并将操作定向到正确的子视图以进行实现。这对我来说似乎是错误的,让我觉得我错过了一些东西。
编写一个焦点管理器和/或选择管理器来记账似乎并不难,并且可以在不将类耦合在一起的情况下完成。窗口系统已经在跟踪哪个视图具有焦点,看起来我会复制代码。
我不确定如何将命令从 ShellViewModel 路由到 ListViewModel 或 TreeViewModel 以完成实际工作而不会弄乱代码。有一天,应用程序将扩展为包含两个以上的孩子,我希望 shell 尽可能不了解孩子,以使扩展尽可能轻松。
查看一些示例 WPF/MVVM 应用程序(Karl Shifflett 的 CipherText、Josh Smith 的 MVVM Demo等),我没有看到任何执行此操作的代码(或者我不明白)。
无论您是否认为我的方法偏离了基础,或者我只是错过了一个细微的差别,请分享您的想法并帮助我重回正轨。谢谢!