【问题标题】:How to pass multiple parameters and EventArgs properties when using EventToCommand in MVVM-Light toolkit在 MVVM-Light 工具包中使用 EventToCommand 时如何传递多个参数和 EventArgs 属性
【发布时间】:2011-04-01 06:09:04
【问题描述】:

我正在为我的 WPF 应用程序使用 MVVM Light 工具包,我想知道在使用 EventToCommand 时是否可以将多个参数传递给 RelayCommand 以及是否可以传递 EventArgs 的属性而不是传递整个 EventArgs?

问候, 纳比尔

【问题讨论】:

  • EventToCommand 只有一个命令参数,但你可以看一下源码,看看附加属性是如何定义的,并添加更多参数。
  • 如果可以传递整个 EventArg 参数,为什么还要传递 EventArgs 的属性?请扩展您的场景并解释您要完成的工作。
  • 嗨,马特,我不想传递 EventArgs,因为我不希望我的视图模型依赖于不同事件类型的 Eventargs 的各种衍生物(例如 keyupeventargs、keydowneventargs)。我只想将我需要的数据/属性从 EventArgs 传递给我的 viewmodel 方法。我认为它更清洁。

标签: wpf mvvm mvvm-light mvvm-toolkit


【解决方案1】:

如果场景是这样的

 <i:Interaction.Triggers>
                <i:EventTrigger EventName="KeyDown">
                    <cmd:EventToCommand Command="{Binding SearchKey}" PassEventArgsToCommand="True" 
                    CommandParameter="{Binding Text, ElementName=TextSearchCashDrawer}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>

输入键上的内容我需要从文本框中读取文本并执行搜索。

        SearchKey=new RelayCommand<KeyEventArgs>(e=>
                                                     {
                                                         if(e.PlatformKeyCode==13) //enter key
                                                         {


                                                         }
                                                     });

使用这个我可以过滤哪个键被按下,但是如果在这个 mvvmlight 中按下回车键,如何获取该参数。

【讨论】:

  • 您可以将文本框值绑定到视图模型上的另一个属性,并在中继命令中使用该属性
【解决方案2】:

如果您只想捕获回车键按下,您可以通过 InputBinding 创建一个 KeyBinding。 XAML 中的以下示例将捕获 TextBox 中的 Enter 键按下,并且命令(在本例中为 FindCommand)将在您的 ViewModel 中处理它。

<TextBox Width="80">
     <TextBox.InputBindings>
          <KeyBinding Key="Enter" Command="{Binding FindCommand}" />
     </TextBox.InputBindings>
</TextBox>

为我工作!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-26
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-18
    相关资源
    最近更新 更多