我有一个像这样的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单元格具有相同的效果(即更新绑定)?
1 回答
您应该绑定到
Age
属性,并且模板中没有其他内容可以按预期方式工作:是的,不幸的是,这意味着您需要为每列定义不同的
Style
. 你最好使用DataGridTemplateColumn
:https://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtemplatecolumn(v=vs.110).aspx .