Xaphann
Xaphann

Reputation: 3677

WPF set DataGridTextColumn Visibility based on another element

This should be simple but it is puzzling me. I want to set the Visibility of one of my DataGridTextColumn based on the Visibility of another element. So I did this:

<StackPanel>
    <TextBlock Text="This is the text" Name="MyTextBlock" Margin="5">
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}" >
                <Setter Property="Visibility" Value="Visible" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=MyTextBox, Path=Text}" Value="0">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    <TextBox Text="2"   Name="MyTextBox"  />
    <DataGrid AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="H1" />
            <DataGridTextColumn Header="H2" Visibility="{Binding ElementName=MyTextBlock, Path=Visibility}" />
        </DataGrid.Columns>
    </DataGrid>
</StackPanel>

The Visibility of MyTextBlock works correct but DataGridTextColumn H2 is always visible. What am I doing wrong?

Upvotes: 0

Views: 1376

Answers (1)

Xaphann
Xaphann

Reputation: 3677

@Ruben solution worked. For anyone that cares here is the working code:

<StackPanel>
    <StackPanel.Resources>
        <FrameworkElement x:Key="ProxyElement"
                     DataContext="{Binding ElementName=MyTextBlock}"/>
    </StackPanel.Resources>
    <TextBlock Text="This is the text" Name="MyTextBlock"  Margin="5">
        <TextBlock.Style>
            <Style TargetType="{x:Type TextBlock}" >
                <Setter Property="Visibility" Value="Visible" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding ElementName=MyTextBox, Path=Text}" Value="0">
                        <Setter Property="Visibility" Value="Collapsed" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    <TextBox Text="0"   Name="MyTextBox"  />
    <ContentControl Visibility="Collapsed" Content="{StaticResource ProxyElement}"/>
    <DataGrid AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Header="H1" />
            <DataGridTextColumn Header="H2" Visibility="{Binding DataContext.Visibility,  Source={StaticResource ProxyElement}}" />
        </DataGrid.Columns>
    </DataGrid>
</StackPanel>

Upvotes: 1

Related Questions