WPF DataGrid - 重新导入单元格导致绑定不更新

时间:2017-06-04 13:21:31

标签: wpf xaml datagrid

我有一个像这样的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 个答案:

答案 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。您最好使用DataGridTemplateColumnhttps://msdn.microsoft.com/en-us/library/system.windows.controls.datagridtemplatecolumn(v=vs.110).aspx