我有一个可观察的集合,通过它的 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>´´´