1

ここに画像の説明を入力

Itemsources プロパティを使用して DataTable で満たされた DataGrid があります。これは、すべての列と行が自動的に作成されたことを意味します。グリッドの各列ヘッダー セルにコンボボックスを追加する必要があります。

このコードを使用してその部分を実行しました:

<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>

問題は、コンボボックスの 1 つで項目の 1 つを選択すると、すべてのコンボボックスの値が変更されることです。画像を添付しました。どのように修正すればよいですか?また、どの列のコンボボックスが設定されているかを知る必要があります。後でその列を使用する必要があります。私は 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>

しかし、MultiEquiilityConverterは起動しません。

2日間インターネットで検索しましたが、まだ方法が見つかりません。

4

2 に答える 2

1

このコードを使用したコンボボックスに対して、この方法で修正しました:

<DataGrid.ColumnHeaderStyle>
                <Style TargetType="{x:Type DataGridColumnHeader}">
                    <EventSetter Event="Click" Handler="ColumnHeaderClick" />
                    <Setter Property="ContentTemplate">
                        <Setter.Value>
                            <DataTemplate>
                                <ComboBox ItemsSource="{Binding DataContext.ArticleAttributes, Source={x:Reference control}}">
                                    <l:Interaction.Triggers>
                                        <l:EventTrigger EventName="SelectionChanged">
                                            <l:InvokeCommandAction Command="{Binding DataContext.ArticleAttributeCommand, Source={x:Reference control}}" CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}}, Path=SelectedItem}" />
                                        </l:EventTrigger>
                                    </l:Interaction.Triggers>
                                </ComboBox>
                            </DataTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </DataGrid.ColumnHeaderStyle>

そして、この方法で列番号を取得するには:

<EventSetter Event="Click" Handler="ColumnHeaderClick" />

上記のとおりです。

于 2013-05-07T15:32:02.717 に答える