我有一个像这样的DataGrid:
<DataGrid ItemsSource="{Binding Persons}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Age}" CellStyle="{StaticResource EditableDataGridCellStyle}" />
</DataGrid.Columns>
</DataGrid>
我使用此代码更改了DataGridCells的样式
<Style x:Key="EditableDataGridCellStyle" TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text, Mode=TwoWay, UpdateSourceTrigger=LostFocus}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
但是,当我编辑TextBox的文本时,DataGrid会显示新值,但基础Person对象不会更新其Age。当我摆脱“EditableDataGridCellStyle”并手动编辑DataGridCell(通过双击)时,它就像我期望的那样工作。
如何确保编辑TextBox与编辑DataGrid单元具有相同的效果(即更新绑定)?
答案 0 :(得分:0)
您应该绑定到Age
属性,而不是模板中的任何其他属性,以使其按预期工作:
<Style x:Key="EditableDataGridCellStyle" TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="DataGridCell">
<TextBox Text="{Binding Age}" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
是的,不幸的是,这意味着您需要为每列定义不同的Style
。您最好使用DataGridTemplateColumn
:https://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtemplatecolumn(v=vs.110).aspx。