当使用RelayCommand时,如何获取事件发送者?
这是一种令人烦恼的答案,我并没有直接回答你的问题,而是讲述了你应该采取不同的方式。如果你发现自己需要在viewmodel中获取发送对象,那么你应该考虑做一些不同的事情。通过引用视图模型中的按钮或列表框等UI元素,会使得视图模型了解它不应该知道的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>