博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MVVM模式下关闭窗口的实现
阅读量:5313 次
发布时间:2019-06-14

本文共 1828 字,大约阅读时间需要 6 分钟。

原文:

通过行为来实现

实现界面与逻辑的分离

窗口关闭行为:其中含有布尔型的Close属性,将相应的关闭行为绑定到该属性上,则可以实现窗口的关闭行为,从而实现VM与View的分离

public class WindowCloseBehaviour : Behavior
{ public static readonly DependencyProperty CloseProperty = DependencyProperty.Register( "Close", typeof(bool), typeof(WindowCloseBehaviour), new FrameworkPropertyMetadata( false, OnCloseChanged)); public bool Close { get { return (bool)GetValue(CloseProperty); } set { SetValue(CloseProperty, value); } } private static void OnCloseChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { var window = ((WindowCloseBehaviour)d).AssociatedObject; var newValue = ((bool)e.NewValue); if (newValue) { window.Close(); } }

 

View:

xmlns:event="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

而behaviors则是声明的WindowCloseBehaviour的命名空间

 

ViewModel:

private bool _isWinClose;        ///         /// 指示窗口是否关闭        ///         public bool IsWinClose        {            get { return _isWinClose; }            set            {                _isWinClose = value;                OnPropertyChanged("IsWinClose");                //窗口关闭则重置窗口状态                if (IsWinClose)                {                    ResetWindowCloseState();                }            }        }        //重置窗口状态        private void ResetWindowCloseState()        {            IsWinClose = false;        }

 

在业务逻辑中只需要指定isWinClose = true那么就能够关闭窗口了;

 

当然实现的方式有很多种,用附加属性也是能够实现的;这里使用行为的话是为了指定类型从而避免附加属性的类型判断

 

posted on
2018-08-14 10:13 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/9472930.html

你可能感兴趣的文章
Swift的高级分享 - Swift中的逻辑控制器
查看>>
Swagger简单介绍
查看>>
Python数据分析入门案例
查看>>
vue-devtools 获取到 vuex store 和 Vue 实例的?
查看>>
内存地址对齐
查看>>
JavaScript介绍
查看>>
yum 命令跳过特定(指定)软件包升级方法
查看>>
创新课程管理系统数据库设计心得
查看>>
Hallo wolrd!
查看>>
16下学期进度条2
查看>>
Could not resolve view with name '***' in servlet with name 'dispatcher'
查看>>
Chapter 3 Phenomenon——12
查看>>
pandas 修改指定列中所有内容
查看>>
「 Luogu P2285 」打鼹鼠
查看>>
lua语言入门之Sublime Text设置lua的Build System
查看>>
vue.js基础
查看>>
电脑的自带图标的显示
查看>>
[转载] redis 的两种持久化方式及原理
查看>>
C++ 删除字符串的两种实现方式
查看>>
ORA-01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
查看>>