RelayCommand を使用する場合、どのようにイベント送信者を取得しますか?
3 に答える
これは、私が実際にあなたの質問に答えるのではなく、別の方法で何をすべきかについて説明する、苦痛を伴う %¤# の回答の 1 つです。それで、ごめんなさい。ここに行きます:
ビューモデルで送信者オブジェクトを取得する必要がある場合は、おそらく別のことを行う必要があります。たとえば、viewmodel で Button や ListBox を参照することで、viewmodel が何も認識してはならない UI の概念を認識することができます。私の提案は、代わりにコード ビハインド ページのイベントに接続し、送信者について知っておくべきことやその他のことを調べてから、viewmodel コマンドをプログラムで実行することです。これもMVVMの「ルール」に違反していますが、私見では、ビューモデルで送信者を参照するよりもはるかに小さなハックです。
私も同様の問題を抱えていましたが、EventArgsを取得するためだけに必要でした。嬉しいことに、Stack Overflowの別のスレッドで答えを見つけたら、これはとてつもなく単純でした。
<cmd:EventToCommand Command="{Binding SomeCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
その魔法の「PassEventArgsToCommand」設定について知ったら、あなたは金色です。RelayCommand<type>
プレーンなRelayCommandの代わりに使用してください。
これがお役に立てば幸いです。
これは、送信者をコマンド パラメータにバインドすることで実行できます。
<command:EventToCommand
Command="{Binding CommandName}"
CommandParameter="{Binding RelativeSource=
{ RelativeSource FindAncestor,
AncestorType={x:Type TypeOfSender},
AncestorLevel=1}}"
PassEventArgsToCommand="True" >
</command:EventToCommand>