當我試圖在默認執行時禁用命令(即使沒有傳遞CanExecute謂詞)時,我正面臨着asny ICommand實現的奇怪行爲。異步ICommand實現
public bool CanExecute(object parameter)
{
if (CanExecutePredicate == null)
{
return !mIsExecuting;
}
return !mIsExecuting && CanExecutePredicate(parameter);
}
public async void Execute(object parameter)
{
mIsExecuting = true;
await ExecuteAsync(parameter);
mIsExecuting = false;
}
我試着介紹一個私人布爾,我在執行之前設置爲true,之後再設置爲false。當執行完成後,bool被設置,但是隻有當我點擊一個鼠標按鈕或移動鼠標或w/e後才能調用CanExecute。
現在我試着打電話給
CanExecute(null);
後
mIsExecuting = false;
,但沒有幫助也沒有。我不知道我錯過了什麼。
感謝您的幫助
編輯:
爲了澄清我添加構造該類藏漢:
public AsyncRelayCommand(Func<object, Task> execute)
: this(execute, null)
{
}
public AsyncRelayCommand(Func<object, Task> asyncExecute,
Predicate<object> canExecutePredicate)
{
AsyncExecute = asyncExecute;
CanExecutePredicate = canExecutePredicate;
}
protected virtual async Task ExecuteAsync(object parameter)
{
await AsyncExecute(parameter);
}
'Execute'在哪裏起作用? – Petaflop
何時何地設置'CanExecutePredicate'? –
@ AlessandroD'Andria我沒有設置它,現在總是爲空 – user3292642