我的代码大致如下:
<MenuItem Header="Do Something"
Command="{Binding ChangeSomeEnumValue}"
CommandParameter="{x:Static someNamespace:SomeEnum.EnumValue}" />
在用作 DataContext 的视图模型中:
// RelayCommand takes an Action<object> to be used by Execute, and a
// Predicate<object> to be used by CanExecute.
this.ChangeSomeEnumValue = new RelayCommand(
p => this.CurrentEnumValue = (SomeEnum)p,
ChangeSomeEnumValuePredicate);
...
bool ChangeSomeEnumValuePredicate(object commandParameter)
{
Console.WriteLine(commandParameter);
var enumValue = (SomeEnum)commandParameter;
...
return true;
}
首次显示时MenuItem
,输出为:
EnumValue
EnumValue
EnumValue
当我单击MenuItem
“EnumValue”时再打印 3 次,然后我得到一个NullReferenceException
就行var enumValue = (SomeEnum)commandParameter
(commandParameter
为空)。
我一辈子都想不出一个为什么CommandParameter
会正确的原因,前几次CanExecute
被称为,但null
另一次。这里发生了什么?