WPF DataGrid:如何防止按下回车键时自动更改行?
Posted
技术标签:
【中文标题】WPF DataGrid:如何防止按下回车键时自动更改行?【英文标题】:WPF DataGrid: How to prevent auto change row on enter key pressed? 【发布时间】:2015-12-18 00:08:15 【问题描述】:我在我的 WPF 项目中使用 MVVM 模式,现在我遇到了标题中提到的问题。我发现一些建议是像这样使用KeyEventArgs.Handled = true;
:
private void PreviewKeyDown(object sender, KeyEventArgs e)
if ((e.Key.Equals(Key.Enter)) || (e.Key.Equals(Key.Return)))
e.Handled = true;
但我想在 ViewModel 中编写它,而不是 View 的代码隐藏。这个example 展示了使用MVVM 模式处理Key Event 的方法,但我不知道如何传递KeyEventArgs
参数以供使用。
谁能帮助我? 这是最好的方法吗?
任何建议或建议将不胜感激。
提前致谢。
【问题讨论】:
所有与控件交互的事件代码都应该保留在视图中。无论您如何显示数据,ViewModel 都应该是相同的。如果使用 Datagrid,ListView 或 TextBox 则不是 ViewModel 需要考虑的问题。 初衷是对的。在您的视图模型中,您可以编写值发生变化时会发生的情况。但是价值观是否改变应该是一个观点的问题。你想在DataGrid
中进行编辑吗?否则,您可以禁用它,如下所示:***.com/a/6766500/4424024
我明白,如果我在视图(xaml)中为控件声明一个事件,然后在代码隐藏(xaml.cs)中自动生成一个事件处理程序,但使用 MVVM,代码隐藏,它会起作用不允许(这是规则),我的 DataGrid 可以编辑。
【参考方案1】:
您可以轻松处理回车按键事件,我已经处理了数据网格的回车按键事件,如下代码:
<DataGrid.InputBindings>
<KeyBinding Key="Enter" Command="Binding Path=DataContext.HandleEnterKeyCommand,
RelativeSource=RelativeSource AncestorType=x:Type UserControl" />
</DataGrid.InputBindings>
现在,您可以通过命令在 viewmodel 中编写逻辑。
【讨论】:
以上是关于WPF DataGrid:如何防止按下回车键时自动更改行?的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 WPF DataGrid 在项目更新时取消选择 SelectedItem?
如何防止 ComboBox 中的 NewItemPlaceholder 行绑定到与 WPF 中的 DataGrid 相同的 DataTable
输入新字段时如何在 WPF DataGrid 中自动生成 ID