使用 MVVM 灯光从视图模型中关闭窗口 [重复]

Posted

技术标签:

【中文标题】使用 MVVM 灯光从视图模型中关闭窗口 [重复]【英文标题】:Close a window from view model using MVVM light [duplicate] 【发布时间】:2015-05-13 09:30:20 【问题描述】:

我创建了一个带有数据输入表单的视图 (userControl)。我还有一个绑定了所有逻辑的视图模型。当按下按钮时,它通过我创建的 ButtonCommand() 方法将数据发送到服务器(我使用 RelayCommand 作为按钮)。

在这个方法的最后我想做一个:

this.Close()

但显然“this”不是指视图,它不起作用。

有什么方法可以在不使用 Codebehind 视图的情况下关闭窗口?

提前致谢

【问题讨论】:

标记的重复或this 应该有帮助 【参考方案1】:

有这样的命令

Command="Binding CloseWindowCommand, Mode=OneWay" 
CommandParameter="Binding ElementName=MyWindow"

然后在处理程序中关闭它!

【讨论】:

但是如果您将视图作为CommandParameter 传递,那么您的视图模型就会知道该视图。我建议您的视图实现一个接口,该接口带有您的视图实现的Close() 方法。然后,您将视图的引用作为视图模型的构造函数中的接口传递,您的视图模型可以在不知道其实现的情况下调用 Close() 方法 ViewModel 构造函数,是我很久没有使用过的东西来获取视图类型。即使您使用 interfave ,您也会从视图中传递信息,从而以一种或其他方式击败 mvvm! @user1 除非他也计划在UserControl 上实现Close(),否则接口并不是真正需要的。 如果您不遵循 mvvm 模式,则无法将应用程序拆分为视图和虚拟机。重点是您可以在不同的程序中重复使用视图模型。例如,您的视图模型在关闭 wpf 窗口时可以正常工作,但是当您使用 asp.net 应用程序实现视图模型时,它会出错。与使用接口的依赖注入一样,您只需在您的 asp.net 页面上实现 close 方法,其他一切都完全相同 嗯.. 是的,没错!

以上是关于使用 MVVM 灯光从视图模型中关闭窗口 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ViewModel 命令生成的线程中关闭窗口? [复制]

如何从视图模型中关闭 Catel 框架数据窗口

WPF(MVVM):从 Viewmodel 关闭视图?

如何使用 MVVM 灯光从 CustomControl 引用视图模型

在tkinter中关闭窗口之前执行某个命令[重复]

在 C# 中的窗口窗体应用程序中关闭窗口时发出警报 [重复]