當我使用DelegateCommand
時,只要手動提升PropertyChange
事件中的CanExecuteChanged
,只要此命令依賴於更改。
下面是一個例子,我做了前幾天在CanExecute
是基於關閉IsLoading
和IsValid
屬性:
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()
方法,當相關屬性改變時。
很高興我發現這個,它的wayyyy比專門爲我調用CanExecuteChanged更好 – 2013-11-15 15:11:08