从MVVM中的视图模型关闭视图

时间:2014-06-12 06:03:11

标签: c# wpf mvvm

我在网上看过很多例子,但我无法弄清楚我在这里做错了什么。 我需要从视图模型中关闭视图。以下是我尝试过的代码:

视图模型:

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;

3 个答案:

答案 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,但我希望它为您的问题提供可能的解决方案的一些指导。