2012-03-02 61 views
0

我有一些DataGrid,数据绑定到我的集合(INotifyCollectionChanged)。WPF DataGrid,处理键和无数据

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

这种情况几乎可以正常工作。

PreviewKeyUp仅当网格中的某个元素聚焦时才会触发(例如DataGridRow)。但如果我没有任何记录,就没有焦点,事件从未被解雇。

所以我的问题是:如果有可能以某种方式处理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"> 

任何一个有一些想法?

回答

0

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

+0

但是如果我在窗体上有2个DataGrid ...如何识别在哪个网格用户尝试添加新行? – Carnifex 2012-03-04 14:26:23

+0

@Carnifex,那么你可以选择“询问”用户...添加新的记录到“网格A”或“网格B”,并从该工作...或者,暗示其中一个网格是“默认”网格该记录将被添加到。 – DRapp 2012-03-04 14:32:39

+0

“默认”网格不是一个选项:两个网格 - 标题,线条。用户可以(或必须)添加标题信息,然后详细信息行 – Carnifex 2012-03-04 17:42:30