WPF - 绑定到附加 属性 的 DataGrid 列在上下文菜单上不起作用

WPF - DataGrid column binding to attached property not working on context menu

我有 ToggleButton 和一个 DataGridDataGridColumn 中的每一行都有一个 ColGroup AttachedProperty 设置为列组名称的名称.

附上属性:

public class DataGridColumnsGroupProperty {
    public static readonly DependencyProperty ColGroupProperty =
        DependencyProperty.RegisterAttached("ColGroup", typeof(object), typeof(DataGridColumnsGroupProperty), new FrameworkPropertyMetadata(null));

    public static void SetColGroup(DependencyObject element, string value) {
        element.SetValue(ColGroupProperty, value);
    }

    public static string GetColGroup(DependencyObject element) {
        return (string)element.GetValue(ColGroupProperty);
    }
}

ToggleButtons 有两个作业,在 Check/UnCheck show/collapse 具有相同组名的所有列上。

并且它有一个 ContextMenu,它只显示具有相同组名的 DataGridColumns

我已设法将所有 DataGridColumns 绑定到 ToggleButton,但无法找到折叠具有不同组名的 DataGridColumns 的方法。

如何在样式触发器中仅使用带有 givin 组名称的列来填充上下文菜单?

以及如何在取消选中切换按钮时隐藏所有具有组名称的列?

XAML:

<ToggleButton.ContextMenu>
    <ContextMenu x:Name="ContextMenu" ItemsSource="{Binding Columns, ElementName=ElementDataGrid, Converter={StaticResource TestConverter}}">
        <ContextMenu.ItemContainerStyle>
            <Style TargetType="MenuItem">
                <Setter Property="HeaderTemplate" Value="{Binding HeaderTemplate}"/>
                <Setter Property="Header" Value="{Binding Header}"/>
                <Setter Property="StaysOpenOnClick" Value="True" />
                <Setter Property="AutomationProperties.Name" Value="{Binding Header}"/>
                <Setter Property="IsCheckable" Value="True" />
                <Setter Property="IsChecked" Value="{Binding Visibility, Mode=TwoWay, Converter={StaticResource VisibilityToBooleanConverter}}" />
                <Style.Triggers>
                    <Trigger Property="attachedProperties:DataGridColumnsGroupProperty.ColGroup" Value="FirstGroup">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </ContextMenu.ItemContainerStyle>
    </ContextMenu>
</ToggleButton.ContextMenu>

数据网格列:

<DataGridTextColumn x:Name="StoryCol" attachedProperties:DataGridColumnsGroupProperty.ColGroup="FirstGroup" Header="{x:Static p:Resources.Story}" IsReadOnly="True" Binding="{Binding Story}" Visibility="Visible" />
<DataGridTextColumn x:Name="CadIdCol" attachedProperties:DataGridColumnsGroupProperty.ColGroup="SecondGroup" Header="{x:Static p:Resources.CadId}" IsReadOnly="False" Binding="{Binding CadId}" Visibility="Visible" />

就绑定到附加的 属性 而言,使用 DataTrigger 应该有效:

<DataTrigger Binding="{Binding Path=(attachedProperties:DataGridColumnsGroupProperty.ColGroup)}" Value="FirstGroup">
    <Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>