WPF:隐藏文本时将文本绑定到Header DataGridColumn

时间:2014-08-13 09:48:04

标签: c# wpf binding datagrid hidden

样品:

<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中的标头中。 此示例无效。

结果: enter image description here

enter image description here

正如您所看到的,由于某种原因,第二个DataGrid不想绑定Label

中的文字

1 个答案:

答案 0 :(得分:2)

使用 x:Reference 代替 ElementName ,它会起作用:

<TextBlock Text="{Binding Source={x:Reference label1}, Path=Content}"/>

问题是ElementName在内部使用Visual树来查找源元素对象,但由于网格最初是折叠的,因此无法找到它。

x:Reference内部不使用Visual树。因此,即使在折叠状态下也能够解析绑定。

您可以在此处阅读更多相关信息 - ElementName v/s x:Reference