![]() |
1
5
从视图模型打开子窗口违反了视图和视图模型之间的分离,而该模式应该是所有的。因此,对于从何处打开子窗口,您可能没有太多选择——网格所在页面的代码隐藏在后面。(这也违反了模式,但是,除了一个复杂的解决方案,这是你所能做的。)我使用MVVM模式,但我并不“宗教”它。当效率决定的时候,我会违反模式的一些规则。 至于将该项传递给ViewModel,我想您可以在ViewModel上创建一个表示该项的ID的属性。我一直在使用子窗口作为数据输入窗体进行更新和添加。我倾向于为它们中的每一个创建一个视图模型。在您的案例中,您将拥有一个表示项目详细信息的ViewModel。会有一些与项目和细节相关的ID。这将是ViewModel上的公共属性。可以为将该ID作为参数的子窗口创建一个构造函数。然后,子窗口构造函数可以创建视图模型并将ID发送给它。 类似这样-其中,域编辑是子窗口的名称。
然后,从单击网格按钮的代码后面,使用新的构造函数创建子窗口,传递从网格行中的项绑定获得的ID,然后由子窗口的独立视图模型接管。 至少,这是我一直在努力的。 |
![]() |
2
0
中介模式(关于复合应用程序的视图之间的消息传递服务)完成了这项工作。此外,委托在子窗口服务中创建细节视图,并通过消息传递服务传递所选对象。这样就不会有任何模式冲突。 |