【问题标题】:C# WPF Same Command for Multiple eventsC# WPF 多个事件的相同命令
【发布时间】:2019-12-30 06:07:49
【问题描述】:

我在 C# 中有一个遵循 MVVM 模式的 WPF 应用程序。我在 xaml 中为将调用命令的数据网格中的双击事件编写了以下代码。

<DataGrid.InputBindings>
    <MouseBinding Gesture="LeftDoubleClick"
                  Command="{Binding LoadDetailGridCommand}">
        <MouseBinding.CommandParameter>
            <MultiBinding Converter="{StaticResource Converter}">
                <Binding ElementName="dgInvDetails" Path="SelectedItem"/>
                <Binding ElementName="dgInvDetails" Path="CurrentColumn"/>
            </MultiBinding>
        </MouseBinding.CommandParameter>
    </MouseBinding>
</DataGrid.InputBindings>

我希望在按下回车键时触发相同的操作。我是否必须对KeyBinding 使用相同的代码并为相同的命令设置Enter 键,或者有更好的方法吗?

提前致谢!

【问题讨论】:

  • 可能有更好的方法来处理转换器和多重绑定,但除此之外。是的,使用键绑定
  • @Andy 谢谢。我添加了键绑定。但是如何优化多重绑定。我没有看到更好的方法来做到这一点。任何帮助将不胜感激。
  • 这取决于你在做什么以及那些东西是什么。

标签: c# wpf


【解决方案1】:

如果要复用绑定,可以将其定义为资源:

<Window.Resources>
    <local:MultiConverter x:Key="Converter" />
    <MultiBinding x:Key="binding" Converter="{StaticResource Converter}">
        <Binding ElementName="dgInvDetails" Path="SelectedItem"/>
        <Binding ElementName="dgInvDetails" Path="CurrentColumn"/>
    </MultiBinding>
</Window.Resources>

...然后使用a custom markup extension 引用它:

<DataGrid.InputBindings>
    <KeyBinding Key="Return" Command="{Binding LoadDetailGridCommand}"
                CommandParameter="{local:BindingResourceExtension binding}" />
    <MouseBinding Gesture="LeftDoubleClick" Command="{Binding LoadDetailGridCommand}"
                  CommandParameter="{local:BindingResourceExtension binding}" />
</DataGrid.InputBindings>

【讨论】:

    【解决方案2】:

    您需要为输入键指定键绑定。

    试试下面

    <DataGrid>
      <DataGrid.InputBindings>
        <KeyBinding Command="{Binding LoadDetailGridCommand}" Key="Enter" >
    <KeyBinding.CommandParameter>
                <MultiBinding Converter="{StaticResource Converter}">
                    <Binding ElementName="dgInvDetails" Path="SelectedItem"/>
                    <Binding ElementName="dgInvDetails" Path="CurrentColumn"/>
                </MultiBinding>
            </KeyBinding.CommandParameter>
    </KeyBinding>
      </DataGrid.InputBindings>
    </DataGrid>
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多