当我使用 a时,只要命令依赖的属性发生更改DelegateCommand
,我就手动引发事件。CanExecuteChanged
PropertyChange
这是我几天前做的一个例子,CanExecute
它基于IsLoading
andIsValid
属性:
public MyViewModel()
{
this.PropertyChanged += MyViewModel_PropertyChanged;
}
void MyViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "IsLoading":
case "IsValid":
((DelegateCommand)MyCommand).RaiseCanExecuteChanged();
break;
}
}
public ICommand MyCommand
{
get
{
if (_myCommand == null)
_myCommand = new DelegateCommand(Run, CanRun);
return _myCommand;
}
}
public bool CanRun()
{
return this.IsValid && !IsLoading;
}
我发现这使逻辑易于遵循和维护,并且仅CanExecuteChanged()
在相关属性更改时才检查方法。