gpt4 book ai didi

.net - 将 KeyEventArgs 从 WPF 中的 View 传递到 ViewModel (MVVM)

转载 作者:行者123 更新时间:2023-12-02 04:22:10 35 4
gpt4 key购买 nike

我有一个文本框,我试图将 KeyEventArgs 从 View 传递到 View 模型。但我不知道如何实现它。基本上我需要的是,如果键入一些特殊字符,则要调用一些函数,如果键入普通文本(如 A、B、C 等),则要调用一些其他函数,如果按下 Enter 键,则调用一些函数需要调用其他函数。如何在 MVVM 中执行此操作。我正在将 WPF 与 VS 2012 结合使用。

最佳答案

方法有很多种,我一一解释一下。1.如果您只有某些选定的键,并且按下这些选定的键时仅要实现某些功能,那么最好的方法如下

<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>

在上面的示例中,您可以看到单击这些特定键时将执行这些命令并将其传递到 View 模型。然后在 View 模型中像往常一样您可以调用函数。

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

<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">                                
<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>

现在这将在所有按键按下或按键按下事件时触发..并且您想要调用的任何函数都可以在 View 模型中调用。(为此,请在项目的 Debug 文件夹中包含交互.dll 和 intereactivity.dll(在C盘的程序文件中安装Blend后,您将获得这些dll。

3.如果是这样的情况,比如在特定键上调用函数或在按下其他键时调用其他函数。那么您必须在后面的代码中执行。

private void Window_KeyUp_1(object sender, KeyEventArgs e)
{
try
{
mainWindowViewModel.KeyPressed = e.Key;

通过这种方式,您可以捕获 keyeventargs .. mainWindowViewModel 是 viewModel 的实例。现在在 View 模型中你这样做

private Key _keyPressed ;
public Key KeyPressed
{
get
{
return _keyPressed;
}
set
{
_keyPressed = value;
OnPropertyChanged("KeyPressed");
}
}

现在在 Viewmodel 中通过以下方式实现此属性

bool CanSearchTextBox
{
get
{
if (KeyPressed != Key.Up && KeyPressed != Key.Down && KeyPressed != Key.Left && KeyPressed != Key.Right && MatchSearchList!=null)
return true;
else
return false;
}
}

关于.net - 将 KeyEventArgs 从 WPF 中的 View 传递到 ViewModel (MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19345192/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com