.net – 从WPF(MVVM)中的View中将KeyEventArgs传递给ViewModel

.net – 从WPF(MVVM)中的View中将KeyEventArgs传递给ViewModel,第1张

概述我有一个文本框,我试图将KeyEventArgs从视图传递到viewmodel.但我不知道如何实现它.基本上我需要的是如果键入一些特殊字符,那么如果键入普通文本(如A,B,C..etc),则调用某些函数,然后调用其他函数,如果按下Enter键则调用其他函数将被调用.如何在MVVM中执行.我在VS 2012中使用 WPF. 有很多方法.让我逐一解释. 1.如果您只有一些选定的键,并且按下这些选定的键 我有一个文本框,我试图将KeyEventArgs从视图传递到viewmodel.但我不知道如何实现它.基本上我需要的是如果键入一些特殊字符,那么如果键入普通文本(如A,B,C..etc),则调用某些函数,然后调用其他函数,如果按下Enter键则调用其他函数将被调用.如何在MVVM中执行.我在VS 2012中使用 WPF.解决方法 有很多方法.让我逐一解释.
1.如果您只有一些选定的键,并且按下这些选定的键只能实现某些功能,那么最佳方法如下

@H_419_16@<TextBox x:name="tBoxCouponSearch" Text="{Binding SearchMatchHomeorVisitor,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource EfesinputTextBox}" WIDth="170" Height="26" AcceptsReturn="False" TabIndex="40" textwrapPing="nowrap" KeyDown="tBoxCouponSearch_KeyDown_1"> <TextBox.inputBindings> <KeyBinding Key="Enter" Command="{Binding SearchTextBoxEnterKeyCommand}"/> <KeyBinding Key="left" Command="{Binding leftRightupdownARROWkeypressed}" /> <KeyBinding Key="Down" Command="{Binding leftRightupdownARROWkeypressed}" /> <KeyBinding Key="Up" Command="{Binding leftRightupdownARROWkeypressed}" /> <KeyBinding Key="Right" Command="{Binding leftRightupdownARROWkeypressed}" /> </TextBox.inputBindings> </TextBox>@H_502_17@

在上面的示例中,您可以看到单击这些特定键,这些命令将被执行并传递给viewmodel.然后像往常一样在viewmodel中调用函数.

2.如果要跟踪所有键,而不管按下哪个键,那么最好使用

@H_419_16@<TextBox x:name="tBoxCouponSearch" Text="{Binding SearchMatchHomeorVisitor,UpdateSourceTrigger=PropertyChanged}" Style="{StaticResource EfesinputTextBox}" WIDth="170" Height="26" AcceptsReturn="False" TabIndex="40" textwrapPing="nowrap" KeyDown="tBoxCouponSearch_KeyDown_1"> <i:Interaction.Triggers> <i:EventTrigger Eventname="KeyUp"> <i:InvokeCommandAction Command="{Binding SearchTextBoxCommand}" CommandParameter="{Binding Path=Text,relativeSource={relativeSource AncestorType={x:Type TextBox}}}"/> </i:EventTrigger> </i:Interaction.Triggers> </TextBox>@H_502_17@

现在这将触发所有按键或按键事件..你想要调用的任何函数都可以调用viewmodel.(这样做包括项目的DeBUG文件夹中的interaction.dll和intereactivity.dll(你会得到)在C盘中的程序文​​件中安装Blend时的那些dll.

3.如果是这样的话就像在一个特定的键上调用函数或者按下其他键上的一些其他函数被调用.然后你必须在代码后面做.

@H_419_16@private voID Window_KeyUp_1(object sender,KeyEventArgs e) { try { mainWindowviewmodel.Keypressed = e.Key;@H_502_17@

通过这种方式,您可以捕获keyeventargs .. mainWindowviewmodel是viewmodel的一个实例.
现在在viewmodel中你喜欢这样

@H_419_16@private Key _keypressed ; public Key Keypressed { get { return _keypressed; } set { _keypressed = value; OnPropertyChanged("Keypressed"); } }@H_502_17@

现在,viewmodel以下列方式实现此属性

@H_419_16@bool CanSearchTextBox { get { if (Keypressed != Key.Up && Keypressed != Key.Down && Keypressed != Key.left && Keypressed != Key.Right && MatchSearchList!=null) return true; else return false; } }@H_502_17@ 总结

以上是内存溢出为你收集整理的.net – 从WPF(MVVM)中的View中将KeyEventArgs传递给ViewModel全部内容,希望文章能够帮你解决.net – 从WPF(MVVM)中的View中将KeyEventArgs传递给ViewModel所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1002796.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存