zoukankan      html  css  js  c++  java
  • WPF MVVM设计模式的ViewModelBase和CommandBase代码

    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 { getprotected 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<objectbool> _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<objectbool> 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的范例修改版本。

  • 相关阅读:
    hdu 1426(DFS+坑爹的输入输出)
    hdu 1430(BFS+康托展开+映射+输出路径)
    hdu 1664(数论+同余搜索+记录路径)
    BestCoder Round #86 二,三题题解(尺取法)
    hdu 1226(同余搜索)
    poj 1426(同余搜索)
    poj 2251(同余)
    hdu 1044(bfs+dfs+剪枝)
    hdu 1455(DFS+好题+经典)
    安装centos7后不能联网
  • 原文地址:https://www.cnblogs.com/luohengstudy/p/3115090.html
Copyright © 2011-2022 走看看