如何设置从视图模型打开的对话框的所有者?

时间:2018-09-18 08:47:16

标签: wpf mvvm

我有一个显示网格的父视图。在其中一列中,每行上都有一个按钮,以显示一个子对话框,以编辑网格的每一行绑定到的对象。该按钮绑定到显示对话框的视图模型上的命令。我使用CommandParameter="{Binding}"传递对对象的引用以编辑到子对话框的视图模型。

我希望对话框相对于打开的窗口居中,我可以使用dialog.WindowStartupLocation = WindowStartupLocation.CenterOwner进行操作,但是我需要引用父窗口。

我可以想到两种解决方案,但我认为它们都不是干净的。

  1. 如果我还没有使用命令参数,则可以将窗口传递给父视图模型,例如CommandParameter="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"。我可以使用多重绑定和转换器来传递两个参数,但这是一种好习惯吗?我倾向于认为视图模型对视图一无所知。

  2. 我可以将对父窗口的引用传递给在视图模型的构造函数中承载父视图的视图模型。再次,我不喜欢视图模型知道关于窗口的信息,这似乎是对错误方向的依赖。

我对这两种方法都不满意的是父视图模型需要了解它正在创建的子窗口。

我看到了this的答案,该答案显示了如何使用视图模型可以用来打开窗口的服务,而无需任何了解其创建窗口的知识,这很好,但是我想一种干净的传递方法父窗口而无需浏览视图模型。

0 个答案:

没有答案