C# TabItem/TabControl中的DataGridTextColumn标题绑定问题

C# TabItem/TabControl中的DataGridTextColumn标题绑定问题,c#,wpf,mvvm,binding,snoop,C#,Wpf,Mvvm,Binding,Snoop,我似乎在尝试绑定DataGridTextColumn的标题列时遇到问题。当我没有TabControl/TabItem包装它时,这段代码可以很好地工作,但是当我把它放在TabControl中时,它就再也找不到DayHeader了。我想FindAncestor/AnceStory类型可能有问题,但我不确定该怎么解决,或者这是否真的是问题所在。任何帮助都将不胜感激 <!--Not Working <TabControl Margin="0,25,0,0" Background="{x:Nu

我似乎在尝试绑定DataGridTextColumn的标题列时遇到问题。当我没有TabControl/TabItem包装它时,这段代码可以很好地工作,但是当我把它放在TabControl中时,它就再也找不到DayHeader了。我想FindAncestor/AnceStory类型可能有问题,但我不确定该怎么解决,或者这是否真的是问题所在。任何帮助都将不胜感激

<!--Not Working
<TabControl Margin="0,25,0,0" Background="{x:Null}">
    <TabItem >
        <Grid >
            <DataGrid></DataGrid>
        </Grid>
    </TabItem>
    <TabItem Header="Test Header">-->

<!--Working-->
<Grid>
    <DataGrid ItemsSource="{Binding RunningViewSource.View}" Margin="0,27,0,-5" SelectionMode="Single">
        <DataGrid.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel VirtualizingStackPanel.VirtualizationMode="Recycling" />
            </ItemsPanelTemplate>
         </DataGrid.ItemsPanel>
         <DataGrid.Columns>
             <DataGridTextColumn Header="Contingencies" Binding="{Binding Contingencies}"
                                            IsReadOnly="True" Width="400" />
             <DataGridTextColumn Binding="{Binding Days[4]}" CellStyle="{StaticResource NumberCell}">
                 <DataGridTextColumn.Header>
                     <TextBlock Text="{Binding DataContext.DayHeader, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}}">
                     </TextBlock>
                  </DataGridTextColumn.Header>
             </DataGridTextColumn>
         </DataGrid.Columns>
     </DataGrid>
</Grid>

<!--Not Working
    </TabItem>
</TabControl>-->

感谢您的帮助。

DataGridTextColumn。标题
不在可视化树中,因此它不在DataContext中。您可以使用文章中显示的
Freezable
类。

谢谢。第一个建议是我已经尝试过的,可惜没有奏效。第二个建议给了我一个错误。由于循环依赖关系,无法调用MarkupExtension.ProvideValue。MarkupExtension内的属性不能引用引用MarkupExtension结果的对象。受影响的MarkupExtensions是:System.Windows.Data.Binding我还没有尝试使用它,但我注意到如果我将第二个选项卡移动到第一个位置,一切都会正常显示。不知何故,当tabitem位于第二个位置时,datagrid没有接收到更改或其他信息?
//Code Behind
 private string dayHeader;

    public string DayHeader
    {
        get { return dayHeader; }
        set
        {
            dayHeader = value;
            NotifyOfPropertyChange(() => DayHeader);
        }
    }