有谁知道我可以如何强制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