首页 文章

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

提问于
浏览
0

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

    您应该绑定到 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 .

相关问题