牢记 MVVM 打开子窗口(例如,修改主窗口上的选定项目)的正确方法是什么?
这就是我所拥有的: MainWindow.xaml (在 MainWindow.xaml.cs 中它分配 MainVM 作为它自己的 DataContext)
我还想拥有:ChildWindow.xaml 和准系统 ChildWindow.xaml.cs,ChildVM 位于控件后面。
所以,现在:
- 如何弹出
ChildWindow
并将一些对象传递Data
给它ChildVM
? - 将结果(真/假)和结果数据(一些复杂对象)返回到
MainVM
? - 作为奖励,可以在他们正在处理
Data
的时候观察到变化吗?MainVM
ChildVM
这是我尝试过的 - 它并不能解决所有问题,但这甚至是正确的方向吗?
- 对于 (2),我创建了一个
Window
名为的子类DialogWindow
,它具有 3 个 DependencyProperties:(Data
用于输入数据)、ResultData
(用于输出数据)和ResultValue
(用于布尔结果)。 ResultData
并且ResultValue
都由ChildVM
使用DialogWindow
Binding 设置,当ResultValue
设置时,DialogWindow
关闭。目前,
ChildWindow
从 MainWindow.xaml.cs 启动(出于所有意图和目的) - 有点糟糕。然后我可以传递一些输入数据,如下所示:ChildDialogWindow w = new ChildDialogWindow();
w.Data = myDataObj;
所以,现在我需要在 ChildVM 上有一个属性Data
,并在 ChildDialogWindow.xaml.cs 中设置。同样,使 .xaml.cs 更厚。
我认为避免 MainWindow.xaml.cs 的更好方法可能是某种作为依赖项DialogService
传递的方法。MainVM
但是,我怎样才能将值传递给ChildVM
?