我正在使用DataGrids
来显示数据的WPF MVVM应用程序。我手动定义列,大多数时候我使用DataGridTextColumn
。
使用键盘导航生成的数据网格时,可以通过导航到单元格来突出显示单元格,并且可以通过开始键入值来更改单元格值。此行为适用于DataGridTextColumn
。
在某些情况下,我必须使用DataGridTemplateColumn
,CellTemplate
和CellEditingTemplate
使用不同的绑定。这允许我格式化显示的值,但是一旦用户开始编辑单元格,就返回到未格式化的值。但是,上述键盘导航和编辑方法对我当前的实现不起作用。我必须突出显示单元格并按F2进行编辑,或者我必须用鼠标单击单元格。
下面是我当前实现的模型,其中Foo
位于DataGridTextColumn
,工作正常,Bar
位于DataGridTemplateColumn
,这给我带来了麻烦
如何更改DataGridTemplateColumn
的定义,使其具有与DataGridTextColumn
相同的键盘导航和编辑功能?
<DataGrid ItemsSource="{Binding ListItems}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Foo}"
Header="Foo" />
<DataGridTemplateColumn Header="Bar">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding Path=BarString, Mode=OneWay}"
HorizontalAlignment="Right" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding BarValue, Mode=TwoWay, UpdateSourceTrigger=LostFocus}"
HorizontalContentAlignment="Right" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
答案 0 :(得分:1)
我遇到了同样的问题,我希望数据网格能够在键盘上输入时使用 我有一个解决方案,通过扩展DataGrid然后重写OnKeyDown到BeginEdit,如下所示:
protected override void OnKeyDown(KeyEventArgs e)
{
Key[] ignorableKeys = { Key.Up, Key.Down, Key.Right, Key.Left, Key.Enter, Key.Escape };
if (!ignorableKeys.Any((x)=> x == e.Key))
{
BeginEdit();
}
base.OnKeyDown(e);
}
但是你会遇到另一个问题,你必须点击Tab来实际编辑单元格,我认为有很多关于这个问题的帖子,如this
答案 1 :(得分:0)
您需要实施单击编辑才能解决此问题。我有同样的问题,但不同的是我有一个我需要编辑的复选框。这篇文章帮助了我。检查出来:http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing