WPF DataGrid,处理键并且没有数据

本文关键字:数据 DataGrid 处理 WPF | 更新日期: 2023-09-27 18:26:23

我有一些DataGrid,数据绑定到我的集合(INotifyCollectionChanged)。

创建新记录时,必须预先填充记录。所以我在dataGrid(CanUserAddRows="False")中禁用了添加,并处理"PreviewKeyUp"事件(当用户按ctrl+N时,执行方法"CreateRecord"-通知添加的新记录)。

这个场景非常完美…几乎。

只有当网格中的某个元素(例如DataGridRow)是焦点时,才会触发PreviewKeyUp。但若我并没有任何记录,那个么就并没有焦点,事件也并没有被炒鱿鱼。

所以我的问题是:当DataGrid为空时,是否有可能以某种方式处理键ctrl+N?例如,触发Focusable或类似的东西。


另一种解决方法是"捕获"以某种方式添加行并填充所需字段,但是
标准NewItemPlaceholder可以,但EditableItems使用不带参数的项构造函数
这是我无法使用的另一个想法(或者我只是不知道如何使用:D)

我的数据必须使用预定义的值(如createdUserId)创建。

需要澄清的一些代码:

public MyItemsCollection Items { get; set; }
public MyItemType CreateRecord()
{
    MyItemType item = new MyItemType(userId);
    item.InitValues();
    Items.Add(item);
    return item;
}
/********/
public void dataGrid_PreviewKeyUp(object sender, KeyEventArgs e)
{
    if (e.Key == Key.N && e.KeyboardDevice.Modifiers == ModifierKeys.Control)
    {
        CreateRecord();
        e.Handled = true;
    }
}
<DataGrid AutoGenerateColumns="False" Name="dataGrid" ItemsSource="{Binding Items}"
          CanUserSortColumns="False" CanUserDeleteRows="True" 
          CanUserAddRows="False" PreviewKeyUp="dataGrid_PreviewKeyUp">

有人有什么想法吗?

WPF DataGrid,处理键并且没有数据

为什么不尝试附加到Window的PreviewKeyUp。。。如果数据网格中没有记录,强制执行……或者不管怎样都强制执行。只要这个人是那种形式,如果这个形式或网格有这种按键的焦点,就可以暗示这样做。