WPF MVVM通用封装库
把MVVM的命令等作为封装库,只需要在工程中引用该库就可以轻松使用MVVM的框架,一劳永逸。
该封装库使从老工程师那里继承而来,个人觉得是个非常好的代码,或者说是好的工具,在这里做一个分享。
1、DelegateCommand封装类
using System;
using System.Windows.Input;
namespace MVVM
{
public class DelegateCommand : ICommand
{
#region Fields
readonly Action<object> execute;
readonly Predicate<object> canExecute;
#endregion
#region Constructors
public DelegateCommand(Action<object> execute)
: this(execute, null)
{
}
public DelegateCommand(Action<object> execute, Predicate<object> canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
this.execute = execute;
this.canExecute = canExecute;
}
#endregion
#region ICommand Members
public bool CanExecute(object parameter)
{
return canExecute == null || canExecute(parameter);
}
public event EventHandler CanExecuteChanged;
// The CanExecuteChanged is automatically registered by command binding, we can assume that it has some execution logic
// to update the button's enabled\disabled state(though we cannot see). So raises this event will cause the button's state be updated.
public void RaiseCanExecuteChanged()
{
if (CanExecuteChanged != null)
CanExecuteChanged(this, EventArgs.Empty);
}
public void Execute(object parameter)
{
execute(parameter);
}
#endregion
}
}
2、ModelBase封装类
using System;
using System.ComponentModel;
using System.Linq.Expressions;
namespace MVVM
{
public class ModelBase : INotifyPropertyChanged
{
public <