Reputation: 3677
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
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