WPF DataGrid,处理密钥而没有数据

时间:2012-03-02 15:40:49

标签: c# wpf datagrid

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

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

这种情况完美地工作......几乎。

仅当网格中的某些元素被聚焦时(例如DataGridRow)才会触发

PreviewKeyUp。但如果我没有任何记录,就没有焦点,事件从未被解雇过。

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


另一种解决方法是“捕获”某种方式添加行和填充必填字段,但是......
标准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">

任何人都有一些想法吗?

1 个答案:

答案 0 :(得分:0)

为什么不尝试附加到Window的PreviewKeyUp ...如果数据网格中没有记录,强制它......或者只是强行它。只要这个人处于那种形式,如果表格或网格具有这种按键的焦点,则可以暗示这样做。