【问题标题】:WPF DataGrid: How to prevent auto change row on enter key pressed?WPF DataGrid:如何防止按下回车键时自动更改行?
【发布时间】: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 中进行编辑吗?否则,您可以禁用它,如下所示:stackoverflow.com/a/6766500/4424024
  • 我明白,如果我在视图(xaml)中为控件声明一个事件,然后在代码隐藏(xaml.cs)中自动生成一个事件处理程序,但使用 MVVM,代码隐藏,它会起作用不允许(这是规则),我的 DataGrid 可以编辑。

标签: c# wpf mvvm datagrid keyboard-events


【解决方案1】:

您可以轻松处理回车按键事件,我已经处理了数据网格的回车按键事件,如下代码:

<DataGrid.InputBindings>
         <KeyBinding Key="Enter" Command="{Binding Path=DataContext.HandleEnterKeyCommand, 
                    RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}" />
 </DataGrid.InputBindings>

现在,您可以通过命令在 viewmodel 中编写逻辑。

【讨论】:

    猜你喜欢
    • 2014-07-09
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2020-09-15
    • 1970-01-01
    • 2011-01-02
    相关资源
    最近更新 更多