0

おおよそ次のようなコードがあります。

<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)commandParametercommandParameteris null)。

私の人生ではCommandParameter、最初の数回CanExecuteが正しい理由を考えることができませんが、null別の時間です。ここで何が起こっているのですか?

4

1 に答える 1

4

私が直面したコンテキストメニューのコマンド述語機能にいくつかの問題がありました。これはあなたを助けるかもしれません -WPF CommandParameterはCanExecuteが初めて呼び出されたときにNULLです

CommandParameter が設定されていても ICommand.CanExecute が null を渡される

于 2011-10-08T09:17:50.977 に答える