我有一个 DataGrid,它使用 Itemsources 属性填充了一个 DataTable,这意味着所有列和行都是自动创建的。我需要在我的网格中的每个列标题单元格中添加一个组合框。
我已经使用这段代码完成了那部分:
<DataGrid Grid.Row="1" Margin="0 5 0 0" ItemsSource="{Binding SelectedExcel}">
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate Template="">
<ComboBox ItemsSource="{Binding DataContext.ArticleAttributes, Source={x:Reference control}}" SelectedItem="{Binding DataContext.SelectedArticleAttribute, Source={x:Reference control}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
</DataGrid>
问题是当我选择其中一个组合框中的一项时,所有组合框的值都会改变。我附上了一张图片。知道我应该如何解决这个问题吗?而且我还需要知道设置了哪一列的组合框。我需要稍后使用该列。我很清楚 DataGrid SelectedItem 和 SelectedIndex 属性,还有其他想法吗?
我试图以这种方式修复它:
<DataGrid.ColumnHeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}">
<Style.Triggers>
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MultiEquilityConverter}">
<Binding RelativeSource="{RelativeSource Self}" />
<Binding Path="CurrentColumn" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}" />
</MultiBinding>
</DataTrigger.Binding>
</DataTrigger>
</Style.Triggers>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ArticleAttributes, Source={x:Reference control}}" SelectedItem="{Binding DataContext.SelectedArticleAttribute, Source={x:Reference control}, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</DataGrid.ColumnHeaderStyle>
但是MultiEquilityConverter永远不会触发。
我已经在网上搜索了两天,但我还没有找到任何方法。