おおよそ次のようなコードがあります。
<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(commandParameteris null)。
私の人生ではCommandParameter、最初の数回CanExecuteが正しい理由を考えることができませんが、null別の時間です。ここで何が起こっているのですか?