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?

WPF DataGrid:如何在单击单元格时停止自动滚动?

如何防止 ComboBox 中的 NewItemPlaceholder 行绑定到与 WPF 中的 DataGrid 相同的 DataTable

输入新字段时如何在 WPF DataGrid 中自动生成 ID

如何使用 MVVM 自动隐藏 WPF 中的 DataGrid 列? [复制]

角度材料自动完成 - 如何防止键盘输入以在建议面板中选择一个选项