使用 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 命令生成的线程中关闭窗口? [复制]