Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用MVVM灯光从视图模型关闭窗口_C#_Wpf_Mvvm Light - Fatal编程技术网

C# 使用MVVM灯光从视图模型关闭窗口

C# 使用MVVM灯光从视图模型关闭窗口,c#,wpf,mvvm-light,C#,Wpf,Mvvm Light,我已经创建了一个视图(userControl),带有一个数据输入表单。我还有一个视图模型,它绑定了所有的逻辑。当按下按钮时,它通过我创建的ButtonCommand()方法将数据发送到服务器(我正在使用按钮的RelayCommand) 在这个方法的最后,我想做一个: this.Close() 但很明显,由于“this”不是指视图,所以它不起作用 有没有办法在不使用代码隐藏视图的情况下关闭窗口 提前谢谢你有这样的命令吗 Command="{Binding CloseWindowCommand,

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

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

this.Close()
但很明显,由于“this”不是指视图,所以它不起作用

有没有办法在不使用代码隐藏视图的情况下关闭窗口


提前谢谢你有这样的命令吗

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

然后在处理程序中关闭它

标记的重复或有帮助,但是如果您将视图作为
CommandParameter
传递,则视图模型知道该视图。我建议您的视图在其上实现一个带有
Close()
方法的接口。然后,将对视图的引用作为视图模型构造函数中的接口传递,视图模型可以调用
Close()
方法,而不知道其实现ViewModel构造函数,这是我很久没有使用过的获取视图类型的方法。即使您使用interfave,您也在从视图传递信息,这在某种程度上击败了mvvm@用户1除非他计划在
UserControl
上也实现
Close()
,否则实际上并不需要接口。如果您不遵循mvvm模式,则无法将应用程序拆分为视图和虚拟机。整个要点是,您可以跨不同的程序重用ViewModel。例如,在关闭wpf窗口时,视图模型可以正常工作,但在使用asp.net应用程序实现视图模型时,视图模型会出现问题。其中,使用依赖项注入接口时,您只需在asp.net页面上实现close方法,其他所有内容都与此完全相同。。是的,没错!