我們嘗試使用ICommand在Prism中設置Silverlight中的按鈕。我們希望有時按鈕被禁用。 DelegateCommand需要2個參數,一個「ExecuteMethod」和一個「CanExecuteMethod」當我們設置ICommand時,我們期望如果使用「CanExecuteMethod」,那麼它將被調用以查看是否可以調用「ExecuteMethod」 。該按鈕的啓用狀態應反映「CanExecuteMethod」的結果ICommands和DelegateCommand的「CanExecuteMethod」爲什麼它不適用於我們?
我們實際看到的內容: 創建窗體時,調用方法並啓用或禁用按鈕。 (在這種情況下,啓用) CanExecuteMethod從不再被調用,即使我們試圖設置行爲以防止發生,Execute方法也會觸發。執行被拋出(我們想避免)。
顯而易見的答案是,我們應該呼籲某種:
OnPropertyChanged("SaveCommand");
,但我們這樣做是錯誤不知。要麼我們假設它的工作方式不適用,或者我們錯過了一個步驟。有任何想法嗎?
代碼:
SaveCommand = new DelegateCommand<string>(OnSaveCommand, CanSave);
public void OnSaveCommand(string helpNumber)
{
OnPropertyChanged("SaveCommand");
//DoSaveStuff
}
public bool CanSave(Object sender)
{
return Model.CanSave();// true or false depending
}
我的DelegateCommand實現沒有RaiseCanExecuteChanged方法,但現在感謝您的支持;)正是我所期待的。 – jpierson 2010-11-03 21:51:54