有誰知道我可以如何強制CanExecute
調用一個自定義命令(約什史密斯的RelayCommand
)?刷新WPF命令
通常,只要在UI上發生交互,就會調用CanExecute
。如果我點擊了某些東西,我的命令就會更新。
我有一種情況,CanExecute
的條件被幕後計時器打開/關閉。因爲這不是由用戶交互驅動的,所以在用戶與UI交互之前不會調用CanExecute
。最終的結果是,我的Button
保持啓用/禁用,直到用戶點擊它。點擊後,它會正確更新。有時會啓用Button
,但當用戶點擊時,它會變爲禁用而不是觸發。
當計時器更改影響CanExecute
的屬性時,如何強制更新代碼?我試圖解決影響CanExecute
的財產PropertyChanged
(INotifyPropertyChanged
),但這並沒有幫助。
例XAML:
<Button Content="Button" Command="{Binding Cmd}"/>
示例代碼背後:
private ICommand m_cmd;
public ICommand Cmd
{
if (m_cmd == null)
m_cmd = new RelayCommand(
(param) => Process(),
(param) => EnableButton);
return m_cmd;
}
// Gets updated from a timer (not direct user interaction)
public bool EnableButton { get; set; }
您是否嘗試爲命令提出INotifyPropertyChanged?你不需要爲Command指定一個字段,每次只需要返回一個新字段。這種組合應該可行。或者只在需要強制的情況下創建新的命令。 – egaga 2013-02-15 17:03:52