14

RelayCommand を使用する場合、どのようにイベント送信者を取得しますか?

4

3 に答える 3

24

これは、私が実際にあなたの質問に答えるのではなく、別の方法で何をすべきかについて説明する、苦痛を伴う %¤# の回答の 1 つです。それで、ごめんなさい。ここに行きます:

ビューモデルで送信者オブジェクトを取得する必要がある場合は、おそらく別のことを行う必要があります。たとえば、viewmodel で Button や ListBox を参照することで、viewmodel が何も認識してはならない UI の概念を認識することができます。私の提案は、代わりにコード ビハインド ページのイベントに接続し、送信者について知っておくべきことやその他のことを調べてから、viewmodel コマンドをプログラムで実行することです。これもMVVMの「ルール」に違反していますが、私見では、ビューモデルで送信者を参照するよりもはるかに小さなハックです。

于 2010-06-03T09:20:04.290 に答える
10

私も同様の問題を抱えていましたが、EventArgsを取得するためだけに必要でした。嬉しいことに、Stack Overflowの別のスレッドで答えを見つけたら、これはとてつもなく単純でした。

<cmd:EventToCommand Command="{Binding SomeCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>

その魔法の「PassEventArgsToCommand」設定について知ったら、あなたは金色です。RelayCommand<type>プレーンなRelayCommandの代わりに使用してください。

これがお役に立てば幸いです。

于 2010-06-03T21:31:35.807 に答える
7

これは、送信者をコマンド パラメータにバインドすることで実行できます。

<command:EventToCommand
              Command="{Binding CommandName}"
              CommandParameter="{Binding RelativeSource=
                                         { RelativeSource FindAncestor, 
                                           AncestorType={x:Type TypeOfSender},
                                           AncestorLevel=1}}" 
              PassEventArgsToCommand="True" >
</command:EventToCommand>
于 2012-12-11T21:53:38.463 に答える