最佳答案
有人知道我如何强制 CanExecute
在自定义命令(Josh Smith 的 RelayCommand
)中被调用吗?
通常,只要 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; }