Передача args событий и отправителя в RelayCommand

Как вы получаете отправителя событий при использовании RelayCommand?

3 ответов


Это один из тех ответов " боль в%"#, где я на самом деле не отвечаю на ваш вопрос, а вместо этого читаю вам лекцию о том, что вы должны делать по-другому. Так что, извини. Вот:

Если вы оказались в положении, когда вам нужно добраться до объекта отправителя в вашей viewmodel, то вы, вероятно, должны сделать что-то другое. Ссылаясь, скажем, на кнопку или список в viewmodel, вы сделали viewmodel осведомленным о концепциях пользовательского интерфейса, которые он не должен знать ничего про. Мое предложение - вместо этого подключиться к событию на странице кода, узнать, что вам нужно знать об отправителе или что-нет, а затем выполнить команду viewmodel программно. Это также нарушает "правила" MVVM, но IMHO это гораздо более тонкий Хак, чем ссылка на отправителя в вашей viewmodel.


у меня была аналогичная проблема, но мне нужно было только получить EventArgs. С радостью, это было абсурдно просто, как только я нашел ответ в другом потоке здесь, в Stack Overflow.

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

Как только вы узнаете об этой волшебной настройке "PassEventArgsToCommand", вы Золотой. Просто используйте RelayCommand<type> вместо простого RelayCommand.

надеюсь, это поможет.


Это можно сделать, привязав отправителя к параметру Command.

<command:EventToCommand
              Command="{Binding CommandName}"
              CommandParameter="{Binding RelativeSource=
                                         { RelativeSource FindAncestor, 
                                           AncestorType={x:Type TypeOfSender},
                                           AncestorLevel=1}}" 
              PassEventArgsToCommand="True" >
</command:EventToCommand>