使用MVVM指示灯按Enter键登录WinRT应用程序

时间:2013-03-15 14:07:13

标签: c# windows-8 mvvm-light winrt-xaml

我正在开发一个应用程序,用户需要输入用户名和密码才能登录。 我正在使用MVVM光框架从我的viewmodels中分离我的视图。 现在我在我的视图上有一个按钮,在相应的视图模型上捕获了tapped事件。 如果用户按下输入按钮他也可以登录,我也希望有这种可能性。 在WPF中,您可以将按钮设置为IsDefault,但在WinRT中似乎不可能。

有什么想法吗?感谢

5 个答案:

答案 0 :(得分:4)

我认为您可以将此代码放入您的viewmodel并检查是否按下了回车键,然后按下该按键时,只需启动按下按钮时启动的相同方法

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

        };

答案 1 :(得分:2)

根据我的评论,我不建议在视图模型中使用UI代码。使用触发器绑定到文本框中按键的命令。

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

请务必在xaml声明中包含以下内容:

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

希望这有帮助

答案 2 :(得分:0)

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

答案 3 :(得分: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"

但是,它仅适用于所有键。我没有看到过滤某个键的可能性。

答案 4 :(得分:-1)

有:

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

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

来自Nuget。