【发布时间】:2010-06-03 06:51:25
【问题描述】:
使用 RelayCommand 时如何获取事件发送者?
【问题讨论】:
标签: .net mvvm-light relaycommand
使用 RelayCommand 时如何获取事件发送者?
【问题讨论】:
标签: .net mvvm-light relaycommand
这是那些令人痛苦的%¤# 答案之一,我实际上并没有回答您的问题,而是向您介绍您应该采取哪些不同的做法。所以,很抱歉。如下:
如果您发现自己处于需要获取视图模型中的发送者对象的位置,那么您可能应该做一些不同的事情。例如,通过在视图模型中引用按钮或列表框,您可以使视图模型了解它不应该知道的 UI 概念。我的建议是转而连接到代码隐藏页面中的事件,找出您需要了解的有关发送者的信息或其他信息,然后以编程方式执行 viewmodel 命令。这也违反了 MVVM “规则”,但恕我直言,这比在视图模型中引用发件人要轻得多。
【讨论】:
我遇到了类似的问题,但只需要获取 EventArgs。很高兴,一旦我在 Stack Overflow 的另一个线程中找到了答案,这将非常简单。
<cmd:EventToCommand Command="{Binding SomeCommand, Mode=OneWay}" PassEventArgsToCommand="True"/>
一旦您了解了“PassEventArgsToCommand”这个神奇的设置,您就大功告成了。只需使用 RelayCommand<type> 而不是普通的 RelayCommand。
我希望这会有所帮助。
【讨论】:
这可以通过将发送者绑定到命令参数来完成。
<command:EventToCommand
Command="{Binding CommandName}"
CommandParameter="{Binding RelativeSource=
{ RelativeSource FindAncestor,
AncestorType={x:Type TypeOfSender},
AncestorLevel=1}}"
PassEventArgsToCommand="True" >
</command:EventToCommand>
【讨论】: