c# - MVVM 中 Silverlight 的热键命令?

标签 c# silverlight mvvm prism hotkeys

我正在尝试根据 Silverlight 中的击键触发命令。据我了解,您不能在 Silverlight 中使用 AccessKey 或 AcceleratorKey。此外,看起来可能有用的附加属性 InputBindings 也不起作用。

我开始在其他地方寻找。看起来 Prism 是让命令在 Silverlight 中工作的方式,所以我检查了一下。然而,它们只有一个 Click 处理程序,这甚至不是设置键盘命令的有用起点。

我只是错过了 Prism 的某些部分吗?或者是否有使用 MVVM Silverlight 处理热键的良好标准方法?

最佳答案

听起来您正在寻找一种“无代码”的 MVVMish 方式来处理 KeyUp/KeyPress/KeyDown 事件。

选项 #1: Prism 。
您已经提到它只附带 Click 命令。但是,您可以添加自己的附加 DP,以便为您想要的任何事件启用命令(如 KeyUp/KeyDown/KeyPress)。

如果您正在寻找关于 Corey 的示例,那么 Corey 有一个适合 ToggleButton.Checked/Unchecked 事件的示例。
http://www.85turns.com/2009/06/24/togglebutton-command-for-prism/

<ToggleButton x:Name="ToggleButton1" 
            customCommands:Checked.Command="{Binding CheckedCommand}"
            customCommands:UnChecked.Command="{Binding UnCheckedCommand}"
        Margin="8,8,0,8" Content="Check me"
        />

另外,Erik Mork 有一个很棒的视频,可以很好地概述命令以及如何创建自定义命令 Attached DP。 http://development-guides.silverbaylabs.org/Video/Prism-Commands

选项 #2:混合触发器
Expression Blend SDK 随附触发器和行为,可准确定位您尝试执行的操作。
Blend Examples codeplex 项目附带了一个 EventTrigger,您可以使用:

<i:EventTrigger EventName="Click">
      <si:InvokeDataCommand Command="{Binding ShoppingCart.CheckOutCommand}"/>
</i:EventTrigger>

或者,您可以为击键事件创建您自己的自定义触发器,然后随心所欲地执行任何操作。这是一个示例:
http://azurecoding.net/blogs/brownie/archive/2009/04/06/blend-behaviors-ftw.aspx

关于c# - MVVM 中 Silverlight 的热键命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1478094/

相关文章:

c# - 从两列结果集创建图表

c# - 在 C# 中创建 "trusted"xml 文件

silverlight - 带有本地数据库的浏览器 silverlight 4 应用程序可以在 Windows 或 Mac 上运行和安装吗?

c# - 如何为 x :Static 设置后备值

c# - 在关闭时使WPF应用程序保持事件状态

c# - MVVM 中的数据库模型

c# - 将值设置为属性时出现 NullReferenceException

visual-studio-2010 - 在 WriteableBitmap DrawLine 方法中设置线条粗细

Silverlight 3 - 我可以在另一个应用程序中运行浏览器外

wpf - WPF MVVM ListView不更新!