0

コンボボックス要素の 1 つにデータトリガーをアタッチしようとしています。トリガーは、DataGridTextColumn (コンボボックスの祖先) の添付プロパティを読み取り、それに基づいて決定を下す必要があります。問題は、DataGridTextColumn が Visual Tree の一部ではないため、RelativeSource Ancestor で取得できないことです。これがサンプルコードです。

<ComboBox Name="cmbFilter" DisplayMemberPath="CategoryName">
    <ComboBox.Style>
        <Style>
            <Style.Triggers>
               <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type DataGridTextColumn}}, 
                             Path=Header}"
                             Value="Id">
                    <Setter Property="Control.Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </ComboBox.Style>
</ComboBox>

誰もがいくつかの代替案を提案するかもしれません

編集:

@denisあなたの解決策がよくわからないので、詳しく説明させてください。フィルタリング機能を必要とするすべての DataGrid に適用される汎用フィルターを開発しています。DataGrid 定義は、DataGrid でカスタム添付プロパティ「IsFilterable」を指定することにより、フィルタリングが必要かどうかを指定します。個々の DataGridColum は、DataGridColumn で「FilterDisplayType」を指定することにより、必要なフィルターの種類 (コンボボックスまたはテキスト ボックス) を指定します。DataGrid は、上記以外は何も認識しません。すべての機能は、DataGrid および DataGridColumn (すべての種類の列) の上記の添付プロパティに基づいて、フィルターによって処理されます。

4

1 に答える 1

0

私のコメントでの私のポイントは、ヘッダーではなく、バインドするプロパティでトリガーできるということでした..ヘッダーの変更に応答する場合は、ヘッダーをトリガーする必要があるため、これは問題ありませんが、 diff の場所でのみ、応答するモデルのまったく同じプロパティ。

また、コンボ ボックスを DataGridTextColumn に配置することはできないため、次のいずれかを行う必要があります。

<DataGridComboBoxColumn ItemsSource="{Binding CategoryNameItems}" 
                        DisplayMemberPath="{Binding CategoryName}" 
                        Visibility="{Binding MyVisibilityProperty, Converter={StaticResource BoolToVisibility}}" />

列全体を非表示にするか、コンボボックスのみを非表示にするには、CellTemplate に入れます。

<DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <ComboBox ItemsSource="{Binding CategoryNameItems}" DisplayMemberPath="{Binding CategoryName}" 
                                Visibility="{Binding MyVisibilityProperty, Converter={StaticResource BoolToVisibility}}" />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
于 2012-04-10T19:42:17.397 に答える