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