MenuItem.CommandParameterが初回nullとなるWPFのバグ
<MenuItem.ItemContainerStyle>
<Style TargetType="MenuItem">
<Setter Property="Header" Value="{Binding Name}" />
<Setter Property="Command" Value="{Binding SomeCommand}" />
<Setter Property="CommandParameter" Value="{Binding}" />
</Style>
</MenuItem.ItemContainerStyle>
フォーラムで2009年という昔から語られている問題。
http://compositewpf.codeplex.com/discussions/47338
- 長らく指摘されているが、重要度が微妙で未だにバグとして残っている。
- CommandとCommandParameterの実装が別で行われてことがそもそもの発端。
- Parameterが設定される前にCommandのCanExecuteが実行されてしまうのが原因。
- XAMLの書き順を変えたらいいという情報もあるが、どうもうまくいかないらしい。
これの解決法は以下。
- まず、parameterがnullで渡ってきた時の処理を追加する。Falseを返すなど。
- Parameter添付プロパティを作成する。このプロパティの更新時、依存オブジェクトのCommand.RaiseCanExecuteChanged()を呼ぶ。PrismのDelegateCommandなら自分で実装する必要なし。
- Xamlでは、my:DelegateCommandFix.ParameterをCommandParameterの代わりに記述する。
0 件のコメント:
コメントを投稿