c# - 绑定(bind)仅适用于第一个 TabItem

标签 c# wpf datagrid tabcontrol

我尝试更改 DataGridColumnHeader,它取决于 Combobox 值,但它仅适用于第一个 tabItem。如果我重新排序列 - 它仅适用于第一个 tabItem。我应该怎么办?我的 XAML:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="0.15*"></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <ComboBox Margin="10" ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem}"/>
    <TabControl Grid.Row="1">
        <TabItem Header="Second">
            <DataGrid AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.Header>
                            <TextBlock Text="{Binding DataContext.SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
                        </DataGridTemplateColumn.Header>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </TabItem>
        <TabItem Header="First">
            <DataGrid AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.Header>
                            <TextBlock Text="{Binding DataContext.SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" />
                        </DataGridTemplateColumn.Header>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </TabItem>
    </TabControl>
</Grid>

代码示例 here

最佳答案

header 基本上用于提供硬编码值。

使用标题模板:

   <TabControl Grid.Row="1">
        <TabItem Header="Second">
            <DataGrid AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTemplateColumn>
                        <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding DataContext.SelectedItem, RelativeSource={RelativeSource  Mode=FindAncestor, AncestorType=Window}}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>

                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </TabItem>
        <TabItem Header="First">
            <DataGrid AutoGenerateColumns="False">
                <DataGrid.Columns>                                              
                    <DataGridTemplateColumn>
                         <DataGridTemplateColumn.HeaderTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding DataContext.SelectedItem, RelativeSource={RelativeSource  Mode=FindAncestor, AncestorType=Window}}" />
                            </DataTemplate>
                        </DataGridTemplateColumn.HeaderTemplate>                            
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </TabItem>
    </TabControl>

关于c# - 绑定(bind)仅适用于第一个 TabItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27635520/

相关文章:

wpf - 如何在 WPF 中绘制一个凹角矩形?

c# - Visibility.Collapse 不会在 Win8 上完全折叠项目

c# - 弯曲并遵循某些路径几何形状的 WPF 动画

c# - 如何使用 2 个字段进行排序

c# - 在事件触发 WPF 之前禁用网格

wpf - 指定 DataGrid 单元格跨多列

javascript - 向 ZingChart 网格添加分页和列排序

c# - 在 C# VS2008 中如何将新的 SqlParameter ("@values", SqlDbType.SomeType, 1500)) 替换为 ("@values", SqlDbType.SomeType, 1500

C# - 在 catch 子句中使用 return

php - 使用 datagrid 、 flash 、 php 、 mysql 、 as3 显示数据库中的数据