Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定在WPF Datagrid第二行标头中不起作用_C#_Wpf_Datagrid - Fatal编程技术网

C# 绑定在WPF Datagrid第二行标头中不起作用

C# 绑定在WPF Datagrid第二行标头中不起作用,c#,wpf,datagrid,C#,Wpf,Datagrid,我的Xaml- <Grid> <DataGrid Name="DataGrid" AutoGenerateColumns="False"> <DataGrid.RowHeaderTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" VerticalAlignme

我的Xaml-

 <Grid>
        <DataGrid Name="DataGrid" AutoGenerateColumns="False">
            <DataGrid.RowHeaderTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center">
                        <TextBlock Text="19" />
                        <TextBlock Text="{Binding Path=Items.Year, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGridRowHeader}}" Foreground="#9493CF" FontSize="16" />                        
                    </StackPanel>
                </DataTemplate>
            </DataGrid.RowHeaderTemplate>
            <DataGrid.Columns>                
                <DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" />
                <DataGridTextColumn Header="Course" Binding="{Binding Path=Course}" />
            </DataGrid.Columns>        
        </DataGrid>
    </Grid>

DataContext为Item的祖先是协同绑定DataGridRowHeader的DataGridRow

 <TextBlock Text="{Binding Path=DataContext.Year, 
                           RelativeSource={RelativeSource Mode=FindAncestor, 
                                            AncestorType=DataGridRow}}" /> 

DataContext为Item的祖先是协同绑定DataGridRowHeader的DataGridRow

 <TextBlock Text="{Binding Path=DataContext.Year, 
                           RelativeSource={RelativeSource Mode=FindAncestor, 
                                            AncestorType=DataGridRow}}" /> 
有了这段代码RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGridRowHeader}},您将向可视化树前进,直到找到第一个DataGridRowHeader

问题在您的路径中-路径=Items.Year

它将在DataGridRowHeader中搜索显然没有的属性项

您需要将路径更改为与此DataContext.Year类似的路径,因为DataContext将获得它绑定到的实际对象,即Items类的实例,然后绑定到该实例中的属性Year

所以正确的绑定应该是这样的:

<TextBlock Text="{Binding Path=DataContext.Year,
                 RelativeSource={RelativeSource Mode=FindAncestor, 
                                    AncestorType=DataGridRowHeader}/>
有了这段代码RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=DataGridRowHeader}},您将向可视化树前进,直到找到第一个DataGridRowHeader

问题在您的路径中-路径=Items.Year

它将在DataGridRowHeader中搜索显然没有的属性项

您需要将路径更改为与此DataContext.Year类似的路径,因为DataContext将获得它绑定到的实际对象,即Items类的实例,然后绑定到该实例中的属性Year

所以正确的绑定应该是这样的:

<TextBlock Text="{Binding Path=DataContext.Year,
                 RelativeSource={RelativeSource Mode=FindAncestor, 
                                    AncestorType=DataGridRowHeader}/>


我将路径更改为path=Year,因为DataContext是一个Items对象,而不是它的属性。看见edit@Sagotharan我不明白这以前是如何工作的,请参见编辑。@Sagotharan-之前它是工作的,因为您使用了path=Item.Year。项是DataGridRow上的属性,它仅对应于DataContext。我的答案也会有用。你试过了吗?我不知道为什么会被否决。我想回到过去,告诉年轻的我忽略这个问题。我以前也投过你的赞成票。顺便说一句,所有这些关于谁否决了谁的指控,你们都意识到,在55个看到这个问题的人中,任何一个都可能否决你们的帖子。我将路径改为path=Year,因为DataContext是一个Items对象,而不是它的属性。看见edit@Sagotharan我不明白这以前是如何工作的,请参见编辑。@Sagotharan-之前它是工作的,因为您使用了path=Item.Year。项是DataGridRow上的属性,它仅对应于DataContext。我的答案也会有用。你试过了吗?我不知道为什么会被否决。我想回到过去,告诉年轻的我忽略这个问题。我以前也投过你的赞成票。顺便说一句,所有这些关于谁否决了谁的指责,你们都意识到,在55个看了这个问题的人中,任何一个都可能否决你们的帖子。我想我错过了我没有给出数据上下文的机会。在我的回答中,现在我考虑了一下,它是必需的,因为它将在DataGridRow属性中搜索Year,这怎么可能对他有效。此外,他还需要AncestorType=DataGridRow,因为DataGridRowHeader由于某些原因在默认情况下不具有相同的datacontext。没有DataGridRowHeader将具有与设置为DataGridRow的datacontext相同的datacontext。我猜您是误解了DataGridColumnHeader,它没有DataContext。我已经测试了这段代码,它工作没有问题。不,我希望它具有相同的DataContext,我没有误解,我只是遇到了一种情况,出于某种原因,它没有与DataGridRow相同的DataContext,我将检查它,稍后在这里发布,仅供参考,如果它具有相同的datacontext,那么您可以直接编写@eranotzap-FYI,这是错误的。它又在绕圈子了。就像上面提到的,首先我需要访问DataGridRowHeader,并且需要访问DataContext,否则它将在DataGridRowHeader中搜索年份。这将如何工作-?OP接受了答案,因为这是有效的-。我想我没有给出DataContext。在我的回答中,现在我考虑了一下,它是必需的,因为它将在DataGridRow属性中搜索Year,这怎么可能对他有效。此外,他还需要AncestorType=DataGridRow,因为DataGridRowHeader由于某些原因在默认情况下不具有相同的datacontext。没有DataGridRowHeader将具有与设置为DataGridRow的datacontext相同的datacontext。我猜您是误解了DataGridColumnHeader,它没有DataContext。我已经测试了这段代码,它工作没有问题。不,我希望它具有相同的DataContext,我没有误解,我只是遇到了一种情况,出于某种原因,它没有与DataGridRow相同的DataContext,我将检查它,稍后在这里发布,仅供参考,如果它具有相同的datacontext,那么您可以直接编写@eranotzap-FYI,这是错误的。它又在绕圈子了。就像上面提到的,首先我需要旅行
直到DataGridRowHeader,并且需要访问DataContext,否则它将在DataGridRowHeader中搜索年份。这将如何工作-?OP接受的答案,因为这是有效的-。可能重复的可能重复的