c# - 使用 MVVM 模式将列表传递给类
问题描述
我不知道我的标题是否正确。
我在这里做的是当用户按下 ENTER 键时导航到下一个控件。
我的控件是动态创建的。
这是我的代码:
<ItemsControl IsTabStop="False" ItemsSource="{Binding ListControls}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Grid.Column="0">
<dxmvvm:Interaction.Behaviors>
<ee:TabOnEnterBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
<TextBox Grid.Column="1">
<dxmvvm:Interaction.Behaviors>
<ee:TabOnEnterBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
<TextBox Grid.Column="2">
<dxmvvm:Interaction.Behaviors>
<ee:TabOnEnterBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
<TextBox Grid.Column="3">
<dxmvvm:Interaction.Behaviors>
<ee:TabOnEnterBehavior/>
</dxmvvm:Interaction.Behaviors>
</TextBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
这是我的TabOnEnterBehavior
课程,我想传递 ListControls 以检查用户是否ENTER
按下last control
public class TabOnEnterBehavior : Behavior<System.Windows.Controls.TextBox>
{
protected override void OnAttached()
{
AssociatedObject.PreviewKeyDown += AssociatedObject_PreviewKeyDown;
}
private void AssociatedObject_PreviewKeyDown(object sender, System.Windows.Input.KeyEventArgs e)
{
if (e.Key == Key.Enter)
{
var request = new TraversalRequest(FocusNavigationDirection.Down);
request.Wrapped = true;
AssociatedObject.MoveFocus(request);
}
}
protected override void OnDetaching()
{
AssociatedObject.PreviewKeyDown -= AssociatedObject_PreviewKeyDown;
}
}
加载项目后,它是这样的:
当用户按下ENTER
键盘上的键时,焦点转到它下面的文本框:
现在,我想要的是当焦点位于最后一个文本框时用户按下 Enter 键,如下所示:
然后我希望焦点转到下一个文本框,如下所示:
但我不能让它工作。我该怎么做?
所以我正在考虑访问列表以检查是否FOCUS
已经在最后一个控件中。TabOnEnterBehavior
但是如何在不破坏 MVVM 模式的情况下将列表传递给我的班级?
编辑:
我也尝试过,KeyboardNavigation.TabIndex="3"
但我的问题是它可以使用选项卡触发。我的要求是ENTER
关键。有可能改变它吗?
解决方案
我强烈建议您不要这样做,因为普通用户习惯于制表符 | shift+tab 导航和 enter 键相当于接受 - 按钮。
但是,如果您确实需要使用回车键,您仍然可以使用选项卡机制并使用InputManager在 AssociatedObject_PreviewKeyDown 上发送选项卡。
推荐阅读
- sql - 使用 OUTPUT 参数将 Sql INSERT 插入 FILETABLE 会创建超时和死锁
- javascript - 将供应商文件导入 webpack 项目
- scala - 使用 spark 中的数据帧以 writetime 写入 Cassandra
- python-3.x - 使用 numpy 将列转换为特定行
- javascript - 为什么我的计算器功能无法完成数学运算?
- php - 如何使用 php 将 onclick 计数保存到 mysql 表中?
- java - Swagger-UI 泛型映射
- c++ - boost::split 算法崩溃(无法访问内存)
- sql - BigQuery 中的 NTILE() 用于非统一存储桶
- datepicker - 渲染 angular2-datetimepicker