【发布时间】:2013-01-09 08:38:09
【问题描述】:
我正在开发一个使用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>
【问题讨论】:
标签: wpf wpfdatagrid datagridtemplatecolumn