在WPF中绑定DataGridTextColumn可见性属性

时间:2012-08-27 15:01:53

标签: wpf xaml data-binding bindingsource itemssource

我有一个数据网格,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>

我也需要我的viewmodel中的复选框,所以我将IsChecked属性绑定到我的ViewModel上的属性

<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}}"/>

有关如何在数据网格中解决此问题的建议吗? 如果我省略了任何可能有用的代码,请告诉我。

1 个答案:

答案 0 :(得分:9)

DataGridColumn实际上并不是VisualTree的一部分,因此对该类的绑定无法找到其来源

您可以在Visibility的{​​{1}}或Width中设置CellStyleHeaderStyle属性,但这并不完全相同

我找到的最接近解决方案的方法是在DataGridColumn中创建一个存储绑定的Freezable对象,然后在<DataGrid.Resources>中使用StaticResource捆绑。这不是一个漂亮的解决方案,但它是我现在唯一能找到的解决方案。

您可以查看其示例here

Visibility