c# - 将带有参数的命令附加到 KeyUp 事件

标签 c# wpf events mvvm command

我目前正在将一个中型 WPF 项目转换为 MVVM,但遇到了一个我无法解决的问题。你能帮我一下吗?

目标框架是 .NET 3.5.1。

我有一个 ListView ,它从底层 View 模型中获取其项目。该 View 模型公开了从 ListView 中删除所选项目的命令。因此,命令参数绑定(bind)到 ListView 的 SelectedItems 属性。

<ListView ItemsSource="{Binding MyItems}"
          x:Name="MyListView"
          SelectionMode="Extended">
</ListView>
<Button x:Name="MyRemoveButton" 
        Content="Remove item" 
        Command="{Binding RemoveItemCommand}"
        CommandParameter="{Binding ElementName=MyListView, Path=SelectedItems}">

我的意图是不仅在按下按钮时执行此命令,而且在 ListView 上触发 KeyUp 事件并且按下的键为“删除”时执行此命令。

当我偶然发现此示例中的交互触发器时,我即将找到解决方案:

http://joyfulwpf.blogspot.com/2009/05/mvvm-invoking-command-on-attached-event.html?showComment=1250325648481#c3867495357686026904

现在这个演示的问题是命令参数是按下的键,但在我的情况下,我需要命令参数是 SelectedItems 属性,并且我需要命令仅在特定键上执行。

有没有什么方法可以在没有太多开销和 MVVM 方式的情况下做到这一点?

像这样的东西会很棒:
<i:Interaction.Triggers>
   <i:EventTrigger EventName="KeyUp">
      <local:CommandAction Command="{Binding RemoveItemCommand}"
                           CommandParameter={Binding ElementName=MyListView, Path=SelectedItems}
                           EventArgument="Key.Delete"/>
   </i:EventTrigger>
</i:Interaction.Triggers>

最佳答案

要以 MVVM 方式执行此操作,您需要将 ListView 的“SelectedItems”属性绑定(bind)到您的 ViewModel,这样您就可以从命令中使用它,而无需通过 CommandParameter 传递它。

关于c# - 将带有参数的命令附加到 KeyUp 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3238448/

相关文章:

c# - 如何使用 C# 控制 Windows 中的任务栏

c# - 取消长时间运行的 Entity Framework 6 异步请求

c# - 如何将 ResourceDictionary 中的 SolidColorBrush 的 Color 属性绑定(bind)到 ViewModel Color 属性

wpf - 如何从在父容器上注册的 MouseLeftButtonUp 事件中获取单击的对象?

Javascript 将 onclick 事件附加到所有链接

c# - 检查函数连续返回值的次数

C# - 是否可以隐藏公开继承的方法(例如,对派生类私有(private))

c# - DataView 行过滤

Java 游戏 - 绘制建筑物的最简单方法

c# - 如何创建没有持续时间或有效期较长的 Windows Azure 媒体服务访问策略?