使用 RelayCommand 时如何获取事件发送者?
问问题
17358 次
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 回答