2013-03-15 60 views
2

我正在开发一个应用程序,用户需要输入用户名和密码才能登录。 我正在使用MVVM light框架来从我的viewmodels分离我的视图。 现在,我在我的视图上有一个按钮,这个按钮会在相应的viewmodel上捕获到。 我也希望有可能,如果用户按下输入按钮,他们也可以登录。 在WPF中,你可以将按钮设置为IsDefault,但在WinRT中似乎不可能。WinRT应用程序通过按下MVVM键的Enter键登录

任何想法?感谢

回答

4

我想你可以把这个代码到你的视图模型和检查输入键,然后按下时,它刚刚推出,如果你的按钮被按下

Windows.UI.Xaml.Window.Current.CoreWindow.KeyDown += (sender, arg) => 
     { 
      if (arg.VirtualKey == Windows.System.VirtualKey.Enter) 
      { 
       //Your login method 
      } 

     }; 
+0

谢谢!它工作完美! – DrZoidberg 2013-03-15 14:27:09

+7

这将打破视图模型中没有UI相关代码的MVVM模式。我不推荐它。 – 2013-03-15 15:00:15

2

正如你将推出同样的方法根据我的评论,我不建议在视图模型中使用UI代码。使用触发器绑定到文本框中的按键命令。

<TextBox> 
     <i:Interaction.Triggers> 
      <i:EventTrigger EventName="KeyDown"> 
       <cmd:EventToCommandCommand="{Binding MyCommand}"/> 
      </i:EventTrigger> 
     </i:Interaction.Triggers> 
    </TextBox> 

一定要incluide在XAML中声明如下:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
      xmlns:cmd="http://www.galasoft.ch/mvvmlight" 

希望这有助于

+1

感谢您的建议,但这些触发器在我的WinRT应用程序中不可用。 – DrZoidberg 2013-03-17 13:10:14

+0

你是对的。请看下面我的评论 – Sven 2015-05-10 19:45:52

-1

有:

xmlns:i="using:WinRtBehaviors" 
xmlns:b="using:Win8nl.Behaviors" 

<i:Interaction.Behaviors> 
    <b:EventToCommandBehavior Event="Loaded" Command="LoadedCommand"/> 
</i:Interaction.Behaviors> 
从的NuGet

0

在页面上有一个虚拟方法叫OnKeyDown(),你可以覆盖。这比订阅事件更安全,并且更适合MVVM。我更喜欢将DataContext转换为我的视图模型类型并调用任何我想要的。

0

这是可能的行为,以实现这一目标:

<interactivity:Interaction.Behaviors> 
    <core:EventTriggerBehavior EventName="KeyDown"> 
    <core:CallMethodAction TargetObject="{Binding}" MethodName="Load" /> 
    </core:EventTriggerBehavior> 
</interactivity:Interaction.Behaviors> 

你必须参考:

xmlns:interactivity="using:Microsoft.Xaml.Interactivity" 
xmlns:core="using:Microsoft.Xaml.Interactions.Core" 

然而,它仅适用于所有键。我没有看到任何可能性来筛选某个关键。

+0

你能推荐一些例子吗? – 2015-10-27 03:46:20

+0

你喜欢什么样的例子?我已经包含了一些XAML。你唯一需要的是你的ViewModel中的一个事件处理器方法。 – Sven 2015-11-15 11:29:18