代码之家  ›  专栏  ›  技术社区  ›  incognito

将事件参数和发送方传递给RelayCommand

  •  10
  • incognito  · 技术社区  · 16 年前

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

    3 回复  |  直到 13 年前
        1
  •  18
  •   Henrik Söderlund    16 年前

    这是-%回答中的痛苦之一,我实际上没有回答你的问题,而是告诉你应该做些什么。所以,很抱歉。下面是:

    如果您发现自己处于一个需要在ViewModel中找到发送者对象的位置,那么您可能应该做一些不同的事情。例如,通过引用视图模型中的按钮或列表框,可以使该视图模型了解不应该了解的UI概念。我的建议是改为在代码隐藏页中挂接事件,找出您需要了解的关于发送者的信息或不知道的信息,然后以编程方式执行viewmodel命令。这也违反了MVVM的“规则”,但是,与在您的视图模型中引用发送者相比,这是一个更为轻微的黑客行为。

        2
  •  10
  •   Rami A.    13 年前

    我也遇到了类似的问题,但只需要得到事件参数。很高兴,当我在堆栈溢出处的另一个线程中找到答案时,这是非常简单的。

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

    一旦你知道了魔法“passeventargstocommand”设置,你就成了黄金。只使用一个 RelayCommand<type> 而不是简单的relaycommand。

    我希望这有帮助。

        3
  •  7
  •   Pat    13 年前

    这可以通过将发送者绑定到命令参数来实现。

    <command:EventToCommand
                  Command="{Binding CommandName}"
                  CommandParameter="{Binding RelativeSource=
                                             { RelativeSource FindAncestor, 
                                               AncestorType={x:Type TypeOfSender},
                                               AncestorLevel=1}}" 
                  PassEventArgsToCommand="True" >
    </command:EventToCommand>
    
    推荐文章