【问题标题】:Binding KeyDown Event Silverlight绑定 KeyDown 事件 Silverlight
【发布时间】:2012-09-24 17:58:36
【问题描述】:

我正在尝试让键绑定导致视图模型中的事件。不幸的是,我已经搜索了一段时间,但到目前为止还没有遇到任何有效的解决方案。

这就是我基本上试图实现的:

<i:Interaction.Triggers>  
    <i:EventTrigger EventName="createNew">  
       <cal:ActionMessage MethodName="newCustomer" />  
    </i:EventTrigger>  
</i:Interaction.Triggers>

我想要一种方法来提供“热键”以允许用户在视图模型中实现 newCustomer 事件。到目前为止,它甚至还没有进入视图模型。如果我附加 EventName="KeyDown" 如果按下任何键,它会很好地工作,但我试图针对单个键。

我会补充一点,视图模型后面的代码是这样的。

public void createNew(object sender, KeyEventArgs e)
     { if (e.Key == Key.F9)
         {
             addCustomer();  
         } }

【问题讨论】:

标签: silverlight caliburn.micro key-bindings


【解决方案1】:

不太确定您使用的是什么控件,但出于示例目的,我将使用文本框... 不完全确定这是否会有所帮助,但我希望它会:

观点:

<TextBox x:Name="MyTextBox" TextAlignment="Left" FontSize="10" Width="240" cal:Message.Attach="[Event KeyUp]=[Action ExecuteAction($executionContext)]"/>

ViewModel:
* 例如,我将使用“Enter”作为您希望执行操作的单个键。

public void ExecuteAction(ActionExecutionContext context)
    {
        var eventArgs = (KeyEventArgs)context.EventArgs;
        if (eventArgs.Key != Key.Enter) return; 
        //Execute Actions...
    }

这应该在您想要的控件上的每个按键上触发代码,如果键不等于您指定的任何内容,它不会做任何事情......

如果我想离开,也许我只是没有正确理解这个问题:D

【讨论】:

  • 不幸的是,这不起作用。我已经使用 cal:Message.Attach="[Event createNew] = [Action newCustomer($this)]" 尝试了 caliburn.micro 方法,但不幸的是它没有工作。感谢您的努力。
  • 嗯...好吧...只是出于好奇,看看您的VM方法和caliburn XAML,您为什么不使用ActionExecutionContext?它对你的口味来说太笨重了吗?只询问有关事件的所有(几乎所有)信息......
  • 经过几次调整后,我能够让它运行起来。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2011-11-15
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多