【发布时间】:2016-09-04 12:34:12
【问题描述】:
我有一个带有一些内部代码的 ViewModel,需要关闭我的 viewmodel 绑定到的窗口。到目前为止,我有:
MyWindow.xaml.cs
public class MyWindow : Window
{
public MyWindow()
{
InitializeComponent();
DataContext = new MyVM(this);
}
}
MyVM.cs
public class MyVM
{
public MyVM(MyWindow owner)
{
Owner = owner;
}
public MyWindow Owner { get; }
public void SomeAction()
{
Owner.Close();
}
}
这很好用,但是我在 MyVM 和 My Window 之间创建了一个不需要的依赖关系,或者至少不是有意的。
所以这是我的问题:有没有办法关闭窗口而不直接将窗口的引用传递给视图模型?
更新 - Possible Duplicate:
问题和接受的答案不同,我没有任何命令绑定,我无法将窗口作为命令参数传递。
可能的重复问题显示一些 vm 代码作为命令绑定到按钮。我不想在命令绑定范围内执行 Window.Close()。
【问题讨论】:
-
要解耦 V 和 VM,您可以使用 Command 和 EventAggregator。
-
您可以在您的 MVVM 中生成一个您将在 View 中订阅的事件。
-
你能告诉我怎么做吗?
-
@JonnyPiazzi 有大约 400-5000 篇关于这个场景的教程/博客文章