样品:
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVis" />
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition></RowDefinition>
</Grid.RowDefinitions>
<Label Grid.Row="0" x:Name="label1" Content="Text"/>
<ComboBox Grid.Row="1" SelectedIndex="0">
<ComboBoxItem x:Name="it1">Item1</ComboBoxItem>
<ComboBoxItem x:Name="it2">Item2</ComboBoxItem>
</ComboBox>
<DataGrid Background="Blue" Grid.Row="2" Visibility="{Binding ElementName=it1, Path=IsSelected, Converter={StaticResource BoolToVis}}">
<DataGrid.Columns>
<DataGridTextColumn>
<DataGridTextColumn.Header >
<TextBlock Text="{Binding ElementName=label1, Path=Content}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<DataGrid Background="Red" Grid.Row="2" Visibility="{Binding ElementName=it2, Path=IsSelected, Converter={StaticResource BoolToVis}}">
<DataGrid.Columns>
<DataGridTextColumn>
<DataGridTextColumn.Header >
<TextBlock Text="{Binding ElementName=label1, Path=Content}"/>
</DataGridTextColumn.Header>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
如何将label1
中的文字绑定到之前隐藏的第二个DataGrid
中的标头中。
此示例无效。
结果:
正如您所看到的,由于某种原因,第二个DataGrid
不想绑定Label
答案 0 :(得分:2)
使用 x:Reference
代替 ElementName
,它会起作用:
<TextBlock Text="{Binding Source={x:Reference label1}, Path=Content}"/>
问题是ElementName
在内部使用Visual树来查找源元素对象,但由于网格最初是折叠的,因此无法找到它。
x:Reference
内部不使用Visual树。因此,即使在折叠状态下也能够解析绑定。
您可以在此处阅读更多相关信息 - ElementName v/s x:Reference。