我在网上看过很多例子,但我无法弄清楚我在这里做错了什么。 我需要从视图模型中关闭视图。以下是我尝试过的代码:
视图模型:
public class ViewModel
{
public event EventHandler RequestClose;
public ViewModel()
{
}
}
//从视图模型调用事件以从View Model中的方法关闭视图 单击按钮
即可调用此事件private void Download()
{
//Download Logic
if(RequestClose != null)
RequestClose(this,EventArgs.Empty);
}
查看:
ViewModel vm = new ViewModel();
vm.RequestClose += delegate(object sender, EventArgs args) {this.Close();}
this.DataContext = vm;
答案 0 :(得分:1)
您在ViewModel构造函数中触发RequestClose事件,这个事件太早,无法被事件注册捕获。
答案 1 :(得分:0)
最好的MVVM解决方案是使用附加行为,如此问题的最高评分回答中所述How should the ViewModel close the form?
答案 2 :(得分:-1)
我之前遇到过类似的问题,并执行了以下操作:在viewmodel中,创建一个可以绑定的命令(我个人使用MvvmLight及其RelayCommand)
public class ViewModel
{
public RelayCommand<object> CloseWindowCommand {get; private set;}
public ViewModel()
{
CloseWindowCommand = new RelayCommand<object>(CloseTheWindow);
}
private void CloseWindow(object obj)
{
var window = obj as Window;
if(window != null)
window.Close();
}
}
在我看来,我有触发此命令的按钮,例如
Button Content="Close" Command="{Binding CloseWindowCommand}" CommandParameter="{Binding ElementName=NameOvViewModel}"
我现在意识到,这可能需要使用MvvmLight,但我希望它为您的问题提供可能的解决方案的一些指导。