wpf mvvm模式下 在ViewModel关闭view
本文只是博主用来记录笔记,误喷
使用到到了MVVM中消息通知功能
第一步:在需要关闭窗体中注册消息
1 public UserView() 2 { 3 this.DataContext = new UserViewModel(); 4 InitializeComponent(); 5 //注册消息 6 Messenger.Default.Register<string>(this,"closeUserView", FunClos); 7 //移除消息 8 Unloaded += (sender, e) => Messenger.Default.Unregister<string>(this, "closeUserView"); 9 } 10 11 private void FunClos(string msg) 12 { 13 MessageBox.Show(msg); 14 this.Close(); 15 }
为什么需要移除消息是因为注册消息相当注册了一个全局变量,当注册后需要及时清除
Register:方法中参数意思分别是
1:执行对象
2:口令
3:需要执行的方法
第二步:在ViewModel中写发送口令方法
1 private RelayCommand _closeWindowCommand; 2 public RelayCommand CloseWindowCommand 3 { 4 get 5 { 6 if (_closeWindowCommand == null) 7 { 8 _closeWindowCommand = new RelayCommand(() => 9 { 10 Messenger.Default.Send<string>("这是一条来自ViewModel Message", "closeUserView"); 11 }); 12 } 13 return _closeWindowCommand; 14 } 15 }
到这里就完成了在ViewModel中关闭指定窗体,当然也可以使用此方法打开指定窗体
好处:降低耦合度
原文:https://www.cnblogs.com/zisai/p/8125736.html