我正在开发一个应用程序,用户需要输入用户名和密码才能登录。 我正在使用MVVM light框架来从我的viewmodels分离我的视图。 现在,我在我的视图上有一个按钮,这个按钮会在相应的viewmodel上捕获到。 我也希望有可能,如果用户按下输入按钮,他们也可以登录。 在WPF中,你可以将按钮设置为IsDefault,但在WinRT中似乎不可能。WinRT应用程序通过按下MVVM键的Enter键登录
任何想法?感谢
我正在开发一个应用程序,用户需要输入用户名和密码才能登录。 我正在使用MVVM light框架来从我的viewmodels分离我的视图。 现在,我在我的视图上有一个按钮,这个按钮会在相应的viewmodel上捕获到。 我也希望有可能,如果用户按下输入按钮,他们也可以登录。 在WPF中,你可以将按钮设置为IsDefault,但在WinRT中似乎不可能。WinRT应用程序通过按下MVVM键的Enter键登录
任何想法?感谢
我想你可以把这个代码到你的视图模型和检查输入键,然后按下时,它刚刚推出,如果你的按钮被按下
Windows.UI.Xaml.Window.Current.CoreWindow.KeyDown += (sender, arg) =>
{
if (arg.VirtualKey == Windows.System.VirtualKey.Enter)
{
//Your login method
}
};
正如你将推出同样的方法根据我的评论,我不建议在视图模型中使用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"
希望这有助于
感谢您的建议,但这些触发器在我的WinRT应用程序中不可用。 – DrZoidberg 2013-03-17 13:10:14
你是对的。请看下面我的评论 – Sven 2015-05-10 19:45:52
有:
xmlns:i="using:WinRtBehaviors"
xmlns:b="using:Win8nl.Behaviors"
<i:Interaction.Behaviors>
<b:EventToCommandBehavior Event="Loaded" Command="LoadedCommand"/>
</i:Interaction.Behaviors>
从的NuGet
。
在页面上有一个虚拟方法叫OnKeyDown(),你可以覆盖。这比订阅事件更安全,并且更适合MVVM。我更喜欢将DataContext转换为我的视图模型类型并调用任何我想要的。
这是可能的行为,以实现这一目标:
<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"
然而,它仅适用于所有键。我没有看到任何可能性来筛选某个关键。
你能推荐一些例子吗? – 2015-10-27 03:46:20
你喜欢什么样的例子?我已经包含了一些XAML。你唯一需要的是你的ViewModel中的一个事件处理器方法。 – Sven 2015-11-15 11:29:18
谢谢!它工作完美! – DrZoidberg 2013-03-15 14:27:09
这将打破视图模型中没有UI相关代码的MVVM模式。我不推荐它。 – 2013-03-15 15:00:15