WPF MVVM设计模式的ViewModelBase和CommandBase代码
ViewModelBase和CommandBase代码的整理如下:
1.ViewModelBase.cs
- using System;
- using System.ComponentModel;
- using System.Linq.Expressions;
- /// <summary>
- /// WPF MVVC设计模式ViewMode基本功能类
- /// </summary>
- public abstract class ViewModelBase : INotifyPropertyChanged, IDisposable
- {
- #region Public Properties
- /// <summary>
- /// 显示名称
- /// </summary>
- public virtual string DisplayName { get; protected set; }
- #endregion
- #region Constructor
- /// <summary>
- /// 实例化一个ViewModelBase对象
- /// </summary>
- protected ViewModelBase()
- {
- }
- #endregion
- #region INotifyPropertyChanged Members
- /// <summary>
- /// 触发属性发生变更事件
- /// </summary>
- /// <typeparam name="T">泛型标记,会匹配函数返回类型,不必手动填写</typeparam>
- /// <param name="action">以函数表达式方式传入属性名称,表达式如下即可:()=>YourViewModelProperty</param>
- protected void OnPropertyChanged<T>(Expression<Func<T>> action)
- {
- var propertyName = GetPropertyName(action);
- OnPropertyChanged(propertyName);
- }
- private static string GetPropertyName<T>(Expression<Func<T>> action)
- {
- var expression = (MemberExpression)action.Body;
- var propertyName = expression.Member.Name;
- return propertyName;
- }
- private void OnPropertyChanged(string propertyName)
- {
- PropertyChangedEventHandler handler = PropertyChanged;
- if (handler != null)
- {
- var e = new PropertyChangedEventArgs(propertyName);
- handler(this, e);
- }
- }
- public event PropertyChangedEventHandler PropertyChanged;
- #endregion
- #region IDisposable Members
- public void Dispose()
- {
- this.OnDispose();
- }
- /// <summary>
- /// 若支持IDisposable,请重写此方法,当被调用Dispose时会执行此方法。
- /// </summary>
- protected virtual void OnDispose()
- {
- }
- #endregion
- }
2.CommandBase.cs
- using System;
- using System.Windows.Input;
- /// <summary>
- /// WPF MVVC设计模式命令基本功能类
- /// </summary>
- public class CommandBase : ICommand
- {
- #region Private Fields
- private readonly Action<object> _command;
- private readonly Func<object, bool> _canExecute;
- #endregion
- #region Constructor
- /// <summary>
- /// 实例化一个CommandBase对象
- /// </summary>
- /// <param name="command">委托一个有object类型参数的命令执行函数</param>
- /// <param name="canExecute">委托一个有object类型参数的命令是否能被执行的函数(可选)</param>
- /// <exception cref="ArgumentNullException">参数command不可以为null引用</exception>
- public CommandBase(Action<object> command, Func<object, bool> canExecute = null)
- {
- if (command == null)
- throw new ArgumentNullException("command");
- _canExecute = canExecute;
- _command = command;
- }
- #endregion
- #region ICommand Members
- public void Execute(object parameter)
- {
- _command(parameter);
- }
- public bool CanExecute(object parameter)
- {
- if (_canExecute == null)
- return true;
- return _canExecute(parameter);
- }
- public event EventHandler CanExecuteChanged
- {
- add { CommandManager.RequerySuggested += value; }
- remove { CommandManager.RequerySuggested -= value; }
- }
- #endregion
- }
关于WPF MVVM设计模式文档(Josh Smith),请阅读:http://msdn.microsoft.com/zh-cn/magazine/dd419663.aspx
此代码是Josh Smith的范例修改版本。
转载于:https://www.cnblogs.com/luohengstudy/archive/2013/06/03/3115090.html
WPF MVVM设计模式的ViewModelBase和CommandBase代码相关推荐
- WPF MVVM设计模式下 相同Xaml绑定不同ViewModel问题
UserControl需要设置静态资源,Window同理 1,添加资源命名空间 xmlns:viewModel="clr-namespace:项目名.ViewModel" 2,设置 ...
- [译]WPF 应用程序和MVVM设计模式 ——Josh Smith
这篇文章讨论: 模式与WPF MVP模式 为什么MVVM更加适用于WPF 用MVVM构建一个应用程序 译文地址: http://www.cnblogs.com/lujiao_cs/ar ...
- WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code)
WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code) 原文:WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GL ...
- WPF MVVM从入门到精通1:MVVM模式简介
WPF MVVM从入门到精通1:MVVM模式简介 原文:WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录 ...
- MVC,MVP,MVVM设计模式的比较
1. MVC设计模式 1.1 概述 意义 说明 M Model,表示模型层,数据模型或业务模型,就是我们要显示给用户查看的内容 V View,表示视图层,就是用户直接看到的界面,例如:Activity ...
- WPF MVVM实例三
在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...
- 学习MVVM设计模式后第一次用于生产
WPF的MVVM设计模式 从winform转变到WPF的过程,难点主要还是在MVVM的设计模式.当然,如果依然采用winform的涉及方式,在每个控件背后绑定事件的方式运用在wpf中,依然可行,但是假 ...
- C# WPF MVVM 实战 – 3 – 树结构
树结构放在 WPF ,有大家熟悉的 TreeView.Menu / MenuItem 等等,自定义的话它是 HierarchicalDataTemplate. 用上 MVVM 模式,视图与数据分离,意 ...
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...
最新文章
- sqlserver中索引优化
- python实现简单的api接口-简单实现Python调用有道API接口(最新的)
- 认识windows消息机制和Spy++工具
- SAP UI5 BindingParser
- 优秀Java开发者都在看的书籍
- 在CentOS上的Docker私有注册表
- 利用Python网络爬虫抓取微信好友的签名及其可视化展示
- 3D数学之镜像、切变
- 一款小工具DeskPinsEx开发笔记
- 为赚快钱,IT 程序员沦为新型电诈案“制刀者”
- docker 启动 redis cluster,使用出现CLUSTERDOWN Hash slot not served(redis cluster重新分配slot)
- H5唤醒支付宝登录授权
- SQL Statements
- 零基础学编程的我的心路历程
- 五大靠谱的婚恋相亲APP详细特点缺点分析!
- C++ 使用OpenSSL 基于SHA1摘要的RSA签名及验签 与Java平台互通
- c语言中优先级劣后级,基金优先级与劣后级的区别是什么 看完你就明白了
- 计算机设计大赛数媒民族元素类,北京工业大学艺术设计学院
- TensorFlow学习——入门篇
- jquery下载图片