将事件args和发送者传递给RelayCommand

时间:2010-06-03 06:51:26

标签: .net mvvm-light relaycommand

使用RelayCommand时如何获取事件发件人?

3 个答案:

答案 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>