wpf 在mvvm模式下通过命令关闭子窗体

我们知道通过注册事件直接可以在后台用this.Close();方法进行直接关闭窗体。但是当我们用了mvvm 模式后,代码的分层和规范让我们不好再用传统的方式进行关闭窗口,那么在mvvm 下我们如何通过命令的方式下关闭窗口呢?

 

利用View里的IsEnable属性

在子窗体的属性中使用  IsEnable . 如下:

在子窗体的xml.cs文件下编写如下代码:

子窗体的构造函数添加注册事件

 ///子窗体构造函数
public SettingParameter()
        {
            InitializeComponent();
            this.DataContext = new SettingViewModel();
            this.IsEnabledChanged += SettingWindow_IsEnabledChanged;
        }

        /// 
        /// 关闭子窗体
        /// 
        /// 
        /// 
        private void SettingWindow_IsEnabledChanged(object sender, DependencyPropertyChangedEventArgs e)
        { 
            if ((bool)e.NewValue == false)
            {
                Grid grid = this.Owner.Content as Grid;
                //父级窗体原来的内容
                UIElement original = VisualTreeHelper.GetChild(grid, 0) as UIElement;
                //将父级窗体原来的内容在容器Grid中移除
                grid.Children.Remove(original);
                //赋给父级窗体
                this.Owner.Content = original;
                this.Close();
            }
        }

settingviewmodel 中 的属性如下:

   private bool isCloseWin = true;
        ///  
        /// 与view的IsEnable属性绑定。当为False时,关闭view。
        /// 当该属性更改时通知客户端。 
        /// 
        public bool IsCloseWin
        {
            get
            {
                return isCloseWin;
            } 
            set
            { 
                this.SetProperty(ref isCloseWin, value); 
            }
        }

前台view 对应的关闭按钮如下:

    

settingviewmodel 对应的命令方法如下:

wpf 在mvvm模式下通过命令关闭子窗体_第1张图片

 

你可能感兴趣的:(wpf)