MVVMにおけるViewModelBaseとCommandBase
6463 ワード
1 public class ViewModelBase : INotifyPropertyChanged , IDisposable
2 {
3 public virtual string DisplayName { get; protected set; }
4
5 public event PropertyChangedEventHandler PropertyChanged;
6
7 protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
8 {
9 if (PropertyChanged != null)
10 {
11 PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
12 }
13 }
14
15 public void Dispose()
16 {
17 this.OnDispose();
18 }
19
20 /// <summary>
21 /// IDisposable, , Dispose 。
22 /// </summary>
23 protected virtual void OnDispose()
24 {
25
26 }
27 }
public class CommandBase : ICommand
{
private readonly Action<object> _command;
private readonly Func<object, bool> _canExecute;
public CommandBase(Action<object> command, Func<object, bool> canExecute)
{
if (command == null)
throw new ArgumentNullException("command");
_canExecute = canExecute;
_command = command;
}
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; }
}
public void Execute(object parameter)
{
_command(parameter);
}
}