我有一些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">
任何人都有一些想法吗?
答案 0 :(得分:0)
为什么不尝试附加到Window的PreviewKeyUp ...如果数据网格中没有记录,强制它......或者只是强行它。只要这个人处于那种形式,如果表格或网格具有这种按键的焦点,则可以暗示这样做。