2010-08-09 50 views
0

我嘗試了一個最小的應用程序,只是一個文本框和一個按鈕。該按鈕綁定到一個RelayCommand實例,並且CanExecute方法只是隨機返回true或false。文本框文本綁定了一個字符串屬性。MVVM Light - 繼續執行RelayCommand實例的CanExecute方法始終執行

令我生氣的是CanExecute方法是「總是」調用的:焦點元素的改變,文本框中按下的一個鍵,似乎所有東西都觸發了我的CanExecute方法。 這是mvvm light工具包的「特徵」嗎?這是否發生在「正常」的wpf應用程序中?

是的,我知道,我想我應該更多地瞭解commandind系統在WPF ... ;-)

謝謝解答!

大衛

回答

0

CanExecute被用於確定如果當前狀態允許執行該命令。這通常綁定到IsEnabled屬性來禁用該命令。

這也應該綁定到ViewModel上的一個屬性,該屬性指示當前視圖狀態是否允許執行。

它與託管窗口上的任何事件觸發器綁定,因爲任何事件都可能導致CanExecute狀態發生更改。

此鏈接確認它在主持窗口中的任何事件中被觸發。

http://robburke.net/2008/04/23/wpf-command-pattern-when-does-it-query-canexecute/

爲什麼你認爲它被稱爲所有的時間是一個問題?只要你在綁定屬性中沒有任何強烈的邏輯,它應該沒問題。

+0

感謝您的即時答覆。這不是一個問題,至少在我將有大量的命令之前。但現在我問爲什麼MS把一個CanExecuteChanged事件放在ICommand接口中...... ;-) – David 2010-08-09 21:20:27