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

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

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

this.Close()

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

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

提前致谢

【问题讨论】:

  • 标记的重复或this 应该有帮助

标签: c# wpf mvvm-light


【解决方案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 方法,其他一切都完全相同
  • 嗯.. 是的,没错!
猜你喜欢
  • 2018-06-12
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
  • 2018-11-25
  • 2012-07-22
  • 2012-11-17
  • 1970-01-01
  • 2012-06-18
相关资源
最近更新 更多