使用 DataTempülate 创建可编辑的 GridviewColumn

Creating editable GridviewColumn with DataTempülate

我有一个可观察的集合通过它的 ItemsSource 属性 绑定到我的 ListView。 我使用 GridView 来显示 ListView 中的项目。 通过在我的 ViewModel 中将“IsServiceMode”属性 设置为“true”(DataContext 到包含 ListView 的 UserControl),我想更改 GridViewColumn 以使用 TextBox 而不是 Textblock。 我将 CellTemplates 与 ContentControl 和 DataTemplate 一起使用 here

但是,尽管编辑器建议使用“位置”,但文本块和文本框控件中的“绑定位置”似乎不起作用。 Position 是绑定 ObservableCollection 中项目的 属性,可以通过 DisplayMemberBinding 使用而不会出现问题。

我的 GridViewColumn

<GridViewColumn Header="Position">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ContentControl>
                                    <ContentControl.Style>
                                        <Style TargetType="{x:Type ContentControl}">
                                            <Style.Triggers>
                                                <DataTrigger Binding="{Binding DataContext.IsServiceMode, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False">
                                                    <Setter Property="ContentTemplate">
                                                        <Setter.Value>
                                                            <DataTemplate>
                                                                <TextBlock Text="{Binding Position, diag:PresentationTraceSources.TraceLevel=High}"/>
                                                            </DataTemplate>
                                                        </Setter.Value>
                                                    </Setter>
                                                </DataTrigger>
                                                <DataTrigger Binding="{Binding DataContext.IsServiceMode, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="True">
                                                    <Setter Property="ContentTemplate">
                                                        <Setter.Value>
                                                            <DataTemplate>
                                                                <TextBox Text="{Binding Position}"/>
                                                            </DataTemplate>
                                                        </Setter.Value>
                                                    </Setter>
                                                </DataTrigger>
                                            </Style.Triggers>
                                        </Style>
                                    </ContentControl.Style>
                                </ContentControl>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>´´´


  • Datagrid自带编辑模式。 IsReadOnly 被打开和关闭。
  • 当编辑模式为 enabled.Like ObservableCollection
  • 时,itemSource 必须实现 INotifyCollectionChanged

演示

        <DataGrid 
            x:Name="DataGrid1" 
            ItemsSource="{Binding Path=ObservableCollection}"
            IsReadOnly="{Binding Path=IsServiceMode}" AutoGenerateColumns="False">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Position" Binding="{Binding Path=Position,Mode=TwoWay}"/>
            </DataGrid.Columns>
        </DataGrid>