ViewModelBase和CommandBase代码的整理如下:

1.ViewModelBase.cs

[c-sharp] view plaincopy
  1. using System;
  2. using System.ComponentModel;
  3. using System.Linq.Expressions;
  4. /// <summary>
  5. /// WPF MVVC设计模式ViewMode基本功能类
  6. /// </summary>
  7. public abstract class ViewModelBase : INotifyPropertyChanged, IDisposable
  8. {
  9. #region Public Properties
  10. /// <summary>
  11. /// 显示名称
  12. /// </summary>
  13. public virtual string DisplayName { get; protected set; }
  14. #endregion
  15. #region Constructor
  16. /// <summary>
  17. /// 实例化一个ViewModelBase对象
  18. /// </summary>
  19. protected ViewModelBase()
  20. {
  21. }
  22. #endregion
  23. #region INotifyPropertyChanged Members
  24. /// <summary>
  25. /// 触发属性发生变更事件
  26. /// </summary>
  27. /// <typeparam name="T">泛型标记,会匹配函数返回类型,不必手动填写</typeparam>
  28. /// <param name="action">以函数表达式方式传入属性名称,表达式如下即可:()=>YourViewModelProperty</param>
  29. protected void OnPropertyChanged<T>(Expression<Func<T>> action)
  30. {
  31. var propertyName = GetPropertyName(action);
  32. OnPropertyChanged(propertyName);
  33. }
  34. private static string GetPropertyName<T>(Expression<Func<T>> action)
  35. {
  36. var expression = (MemberExpression)action.Body;
  37. var propertyName = expression.Member.Name;
  38. return propertyName;
  39. }
  40. private void OnPropertyChanged(string propertyName)
  41. {
  42. PropertyChangedEventHandler handler = PropertyChanged;
  43. if (handler != null)
  44. {
  45. var e = new PropertyChangedEventArgs(propertyName);
  46. handler(this, e);
  47. }
  48. }
  49. public event PropertyChangedEventHandler PropertyChanged;
  50. #endregion
  51. #region IDisposable Members
  52. public void Dispose()
  53. {
  54. this.OnDispose();
  55. }
  56. /// <summary>
  57. /// 若支持IDisposable,请重写此方法,当被调用Dispose时会执行此方法。
  58. /// </summary>
  59. protected virtual void OnDispose()
  60. {
  61. }
  62. #endregion
  63. }

2.CommandBase.cs

[c-sharp] view plaincopy
  1. using System;
  2. using System.Windows.Input;
  3. /// <summary>
  4. /// WPF MVVC设计模式命令基本功能类
  5. /// </summary>
  6. public class CommandBase : ICommand
  7. {
  8. #region Private Fields
  9. private readonly Action<object> _command;
  10. private readonly Func<object, bool> _canExecute;
  11. #endregion
  12. #region Constructor
  13. /// <summary>
  14. /// 实例化一个CommandBase对象
  15. /// </summary>
  16. /// <param name="command">委托一个有object类型参数的命令执行函数</param>
  17. /// <param name="canExecute">委托一个有object类型参数的命令是否能被执行的函数(可选)</param>
  18. /// <exception cref="ArgumentNullException">参数command不可以为null引用</exception>
  19. public CommandBase(Action<object> command, Func<object, bool> canExecute = null)
  20. {
  21. if (command == null)
  22. throw new ArgumentNullException("command");
  23. _canExecute = canExecute;
  24. _command = command;
  25. }
  26. #endregion
  27. #region ICommand Members
  28. public void Execute(object parameter)
  29. {
  30. _command(parameter);
  31. }
  32. public bool CanExecute(object parameter)
  33. {
  34. if (_canExecute == null)
  35. return true;
  36. return _canExecute(parameter);
  37. }
  38. public event EventHandler CanExecuteChanged
  39. {
  40. add { CommandManager.RequerySuggested += value; }
  41. remove { CommandManager.RequerySuggested -= value; }
  42. }
  43. #endregion
  44. }

关于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代码相关推荐

  1. WPF MVVM设计模式下 相同Xaml绑定不同ViewModel问题

    UserControl需要设置静态资源,Window同理 1,添加资源命名空间 xmlns:viewModel="clr-namespace:项目名.ViewModel" 2,设置 ...

  2. [译]WPF 应用程序和MVVM设计模式 ——Josh Smith

    这篇文章讨论: 模式与WPF MVP模式 为什么MVVM更加适用于WPF 用MVVM构建一个应用程序 译文地址:         http://www.cnblogs.com/lujiao_cs/ar ...

  3. WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code)

    WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GLUE code) 原文:WPF MVVM 架构 Step By Step(2)(简单的三层架构示例及粘合代码GL ...

  4. WPF MVVM从入门到精通1:MVVM模式简介

    WPF MVVM从入门到精通1:MVVM模式简介 原文:WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录 ...

  5. MVC,MVP,MVVM设计模式的比较

    1. MVC设计模式 1.1 概述 意义 说明 M Model,表示模型层,数据模型或业务模型,就是我们要显示给用户查看的内容 V View,表示视图层,就是用户直接看到的界面,例如:Activity ...

  6. WPF MVVM实例三

    在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...

  7. 学习MVVM设计模式后第一次用于生产

    WPF的MVVM设计模式 从winform转变到WPF的过程,难点主要还是在MVVM的设计模式.当然,如果依然采用winform的涉及方式,在每个控件背后绑定事件的方式运用在wpf中,依然可行,但是假 ...

  8. C# WPF MVVM 实战 – 3 – 树结构

    树结构放在 WPF ,有大家熟悉的 TreeView.Menu / MenuItem 等等,自定义的话它是 HierarchicalDataTemplate. 用上 MVVM 模式,视图与数据分离,意 ...

  9. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

最新文章

  1. sqlserver中索引优化
  2. python实现简单的api接口-简单实现Python调用有道API接口(最新的)
  3. 认识windows消息机制和Spy++工具
  4. SAP UI5 BindingParser
  5. 优秀Java开发者都在看的书籍
  6. 在CentOS上的Docker私有注册表
  7. 利用Python网络爬虫抓取微信好友的签名及其可视化展示
  8. 3D数学之镜像、切变
  9. 一款小工具DeskPinsEx开发笔记
  10. 为赚快钱,IT 程序员沦为新型电诈案“制刀者”
  11. docker 启动 redis cluster,使用出现CLUSTERDOWN Hash slot not served(redis cluster重新分配slot)
  12. H5唤醒支付宝登录授权
  13. SQL Statements
  14. 零基础学编程的我的心路历程
  15. 五大靠谱的婚恋相亲APP详细特点缺点分析!
  16. C++ 使用OpenSSL 基于SHA1摘要的RSA签名及验签 与Java平台互通
  17. c语言中优先级劣后级,基金优先级与劣后级的区别是什么 看完你就明白了
  18. 计算机设计大赛数媒民族元素类,北京工业大学艺术设计学院
  19. TensorFlow学习——入门篇
  20. jquery下载图片

热门文章

  1. 深入继承之抽象类和接口综合分析及完整案列解说(一)
  2. ubuntu一键安装LAMP 及一键卸载
  3. cmake2 配合1
  4. 蓝桥杯 ALGO-26 算法训练 麦森数
  5. EFK 配置geo-ip落地实践
  6. 《C程序设计新思维》一第6章 玩转指针6.1 自动、静态和手工内存
  7. [raspberry pi3] aarch64 mongodb 编译和安装
  8. 烂泥:SQL Server 2005数据库安装
  9. MPLS_×××入门中文版
  10. imagemagick, imagick和magickwand的安装