WPF DataGrid,处理键和无数据
Posted
技术标签:
【中文标题】WPF DataGrid,处理键和无数据【英文标题】:WPF DataGrid, handle keys and no data 【发布时间】:2012-03-21 02:54:12 【问题描述】:我有一些 DataGrid,数据已绑定到我的集合 (INotifyCollectionChanged
)。
创建新记录时必须预先填写记录。所以我禁用了添加 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">
有人知道吗?
【问题讨论】:
【参考方案1】:为什么不尝试附加到窗口的 PreviewKeyUp... 如果数据网格中没有记录,则强制它... 或者无论如何都强制它。只要该人处于该表单中,如果表单或网格具有此类按键的焦点,则可能暗示这样做。
【讨论】:
但是如果我在表单上有 2 个 DataGrid 怎么办......我如何识别哪个网格用户尝试添加新行? @Carnifex,那么您可以选择“询问”用户...将新记录添加到“网格 A”或“网格 B”并从中工作...或者,只是暗示其中一个grids 是将记录添加到的“默认”网格。 "default" 网格不是一个选项:两个网格 - 标题、行。用户可以(或必须)添加标题信息,然后添加详细信息行 用网格询问用户......也不可能 - 我想当我告诉他“你总是被问到你想要添加记录的网格”时客户的反应:D 我现在实施的选项是按钮“添加“靠近每个网格 - 但这会破坏设计。所以我想要一些正常的解决方案而不是解决方法 @Carnifex,我只是在回复您在表单级别捕获按键的初衷。使用双网格,那肯定是按钮控件,但是很多人有不同的 UI 愿景,没有一个解决方案绝对是最好的以上是关于WPF DataGrid,处理键和无数据的主要内容,如果未能解决你的问题,请参考以下文章