14

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

4

3 回答 3

24

这是那些痛苦的%¤#答案之一,我实际上并没有回答您的问题,而是向您讲述您应该以不同的方式做些什么。所以,很抱歉。开始:

如果您发现自己处于需要获取视图模型中的发送者对象的位置,那么您可能应该做一些不同的事情。例如,通过在视图模型中引用按钮或列表框,您可以使视图模型了解它不应该知道的 UI 概念。我的建议是转而连接到代码隐藏页面中的事件,找出您需要了解的有关发送者的信息或其他信息,然后以编程方式执行 viewmodel 命令。这也违反了 MVVM “规则”,但恕我直言,这比在视图模型中引用发件人要轻得多。

于 2010-06-03T09:20:04.290 回答
10

我遇到了类似的问题,但只需要获取 EventArgs。很高兴,一旦我在 Stack Overflow 的另一个线程中找到答案,这非常简单。

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

一旦你了解了那个神奇的“PassEventArgsToCommand”设置,你就很成功了。只需使用 aRelayCommand<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 回答