使用RelayCommand时如何获取事件发件人?
答案 0 :(得分:19)
这是那些痛苦的答案之一,我实际上并没有回答你的问题,而是向你讲述你应该采取哪些不同的做法。所以,抱歉。这是:
如果您发现自己处于需要访问viewmodel中的sender对象的位置,那么您应该做一些不同的事情。通过引用视图模型中的Button或ListBox,您可以使该视图模型了解它不应该知道的UI概念。我的建议是在代码隐藏页面中连接到事件,找出你需要知道的关于发送者或什么不是的事情,然后以编程方式执行viewmodel命令。这也打破了MVVM“规则”,但恕我直言,这比在视图模型中引用发件人要轻得多。
答案 1 :(得分:10)
我遇到了类似的问题,但只需要获取EventArgs。很高兴,一旦我在Stack Overflow的另一个帖子中找到答案,这就太荒谬了。
<cmd:EventToCommand Command="{Binding SomeCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
一旦你知道了那个神奇的“PassEventArgsToCommand”设置,你就是金色的。只需使用RelayCommand<type>
而不是普通的RelayCommand。
我希望这会有所帮助。
答案 2 :(得分:7)
这可以通过将发件人绑定到命令参数来完成。
<command:EventToCommand
Command="{Binding CommandName}"
CommandParameter="{Binding RelativeSource=
{ RelativeSource FindAncestor,
AncestorType={x:Type TypeOfSender},
AncestorLevel=1}}"
PassEventArgsToCommand="True" >
</command:EventToCommand>