我发现一个奇怪的行为,在一个自定义执行的ICommand
接口我有RaiseCanExecuteChanged
方法,可以从外部调用,并导致调用和reevalute方法和更改命令的状态(和按钮):CanExecuteChanged事件的奇怪行为
public void RaiseCanExecuteChanged()
{
if (_canExecuteChanged != null)
_canExecuteChanged(this, EventArgs.Empty);
}
然而,当事件被执行财产:
public event EventHandler CanExecuteChanged;
它没有工作和CanExecuteChanged
是null
。
将其更改为
private EventHandler _canExecuteChanged;
public event EventHandler CanExecuteChanged
{
add { _canExecuteChanged += value; }
remove { _canExecuteChanged -= value; }
}
它的工作原理之后。
该命令绑定到一个按钮Command
属性。
任何人都可以解释这一点吗?谢谢。
无论如何,WPF Control事件中不存在竞争条件。无论如何,每个事件都应在Dispatcher线程中触发并订阅/取消订阅。 –