1

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

但是,尽管编辑器建议“位置”,但文本块和文本框控件中的“绑定位置”似乎不起作用。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>´´´


4

1 回答 1

0
  • Datagrid 带有编辑模式。IsReadOnly 被打开和关闭。
  • itemSource 必须在启用编辑模式时实现 INotifyCollectionChanged。就像 ObservableCollection

演示

        <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>
于 2020-12-18T01:49:55.243 回答