牢记 MVVM 打开子窗口(例如,修改主窗口上的选定项目)的正确方法是什么?
这就是我所拥有的: MainWindow.xaml (在 MainWindow.xaml.cs 中它分配 MainVM 作为它自己的 DataContext)
我还想拥有:ChildWindow.xaml 和准系统 ChildWindow.xaml.cs,ChildVM 位于控件后面。
所以,现在:
- 如何弹出
ChildWindow并将一些对象传递Data给它ChildVM? - 将结果(真/假)和结果数据(一些复杂对象)返回到
MainVM? - 作为奖励,可以在他们正在处理
Data的时候观察到变化吗?MainVMChildVM
这是我尝试过的 - 它并不能解决所有问题,但这甚至是正确的方向吗?
- 对于 (2),我创建了一个
Window名为的子类DialogWindow,它具有 3 个 DependencyProperties:(Data用于输入数据)、ResultData(用于输出数据)和ResultValue(用于布尔结果)。 ResultData并且ResultValue都由ChildVM使用DialogWindowBinding 设置,当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?