Передача 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>