コンボボックス要素の 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 (すべての種類の列) の上記の添付プロパティに基づいて、フィルターによって処理されます。