2009-09-18 55 views
4

我們嘗試使用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 
     } 

回答

8

你SaveCommand,因爲它是一個DelegateCommand,有一個名爲RaiseCanExecuteChanged()的函數。

當您調用此函數時,它將從CanSave函數中更新控件。

與DelegateCommands相等的OnPropertyChanged是MyCommand.RaiseCanExecuteChanged。

玩得開心!

+0

我的DelegateCommand實現沒有RaiseCanExecuteChanged方法,但現在感謝您的支持;)正是我所期待的。 – jpierson 2010-11-03 21:51:54

相關問題