在WPF绑定DataGridTextColumn visibility属性(Bind DataGri

2019-06-27 10:51发布

我有一个DataGrid它ItemsSource绑定到CollectionViewSource
在每一列中我指定的Path绑定的属性来获取特定信息显示。

我想要做的是,如果用户想要更多信息切换的一些列的一个复选框。 要做到这一点,我需要visibility属性绑定到复选框(带转换器)的价值,但我敢肯定的列的数据上下文与结合的干扰。

<DataGrid ItemsSource="{Binding Source={StaticResource cvs}}" ....>
    <DataGrid.Columns>
        <DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"
            Visibility="{Binding IsChecked,
                                 ElementName=IncludeFullHist, 
                                 Converter={StaticResource boolItemsConverter}}"/>   
    </DataGrid.Columns>
</DataGrid>

我需要的复选框我的视图模型为好,所以我有它的IsChecked属性绑定到属性上我的视图模型

<CheckBox x:Name="IncludeFullHist"  IsChecked="{Binding Path=ManagerFullHist }" />

对于我的网页的其他元素,我已经能够挂钩的知名度与绑定以下两种方法,但也似乎当我将其复制过来到DataGrid中的工作:

<TextBlock DockPanel.Dock="Left" Text=" Visible 2 " 
    Visibility="{Binding Path=DataContext.ManagerFullHist,
                         RelativeSource={RelativeSource FindAncestor,
                         AncestorType={x:Type UserControl}},
                         Converter={StaticResource boolItemsConverter}}"/>
<TextBlock DockPanel.Dock="Left" Text=" Visible 3 " 
    Visibility="{Binding Path=ManagerFullHist, 
                         Source={StaticResource mainWinResource},
                         Converter={StaticResource boolItemsConverter}}"/>

对,我可以在数据网格解决这个问题的方法有什么建议?
请让我知道,如果我省略了,可能是有益的潜在的任何代码。

Answer 1:

DataGridColumn不是实际上部分VisualTree ,所以在类绑定不能找到它们的源

您可以设置之类的东西的VisibilityWidth在属性CellStyleHeaderStyle的的DataGridColumn ,尽管这是不太一样的。

我发现一个解决方案最接近的将是创建一个可冻结在物体的<DataGrid.Resources>存储绑定,然后使用StaticResourceVisibility结合。 这不是一个漂亮的解决方案,但它是唯一一个我能找到在这个时候。

您可以查看它的一个例子在这里

<DataGrid.Resources>
    <local:BindingProxy x:Key="proxy" Data="{Binding IsChecked, 
         ElementName=IncludeFullHist, 
         Converter={StaticResource boolItemsConverter}}" />
</DataGrid.Resources>

<DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"
    Visibility="{Binding Path=Data, Source={StaticResource proxy}}"/>  


文章来源: Bind DataGridTextColumn Visibility Property in WPF