我有一些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">
任何一个有一些想法?
但是如果我在窗体上有2个DataGrid ...如何识别在哪个网格用户尝试添加新行? – Carnifex 2012-03-04 14:26:23
@Carnifex,那么你可以选择“询问”用户...添加新的记录到“网格A”或“网格B”,并从该工作...或者,暗示其中一个网格是“默认”网格该记录将被添加到。 – DRapp 2012-03-04 14:32:39
“默认”网格不是一个选项:两个网格 - 标题,线条。用户可以(或必须)添加标题信息,然后详细信息行 – Carnifex 2012-03-04 17:42:30