繁体   English   中英

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

[英]Close a view from a viewmodel in MVVM

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

ViewModel:

public class ViewModel
{
    public event EventHandler RequestClose;
    public ViewModel()
    {

    }
}

//从视图模型调用事件以从视图模型中的方法关闭视图此事件在单击按钮时被调用

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;

您在ViewModel构造函数中触发RequestClose事件,该事件为时过早,无法被事件注册捕获。

最佳MVVM解决方案是使用附加行为,如对此问题的最高评价答案所述,ViewModel应该如何关闭表单?

我之前遇到过类似的问题,并执行以下操作:在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,但是我希望它为您的问题的可能解决方案提供一些指导。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM