如何在WPF中使DataGrid始终显示其列标题?

3

我正在为工作中的一个项目将Silverlight应用程序移植到WPF,并遇到了一个小的外观问题。在Silverlight应用程序中,Datagrid的ItemsSource最初是一个空的ObservableCollection。当我首次加载应用程序时,即使DataGrid本身为空,列标题也会显示出来。现在我正在尝试在WPF应用程序中实现相同的效果。ObservableCollection和Datagrid都是相同的,但现在只有在向Datagrid添加行时才会出现列标题。我的Datagrid的XAML如下:

<DataGrid ColumnWidth="196" GridLinesVisibility="All"
                        AutoGenerateColumns="True" IsReadOnly="True" HorizontalAlignment="Center"
                        Height="375" Width="775" ItemsSource="{Binding source}"
                        RowBackground="#A5BACA" AlternatingRowBackground="LightGray"
                        VerticalAlignment="Center" Name="documentsDG"
                        FontWeight="Normal" FontSize="13" HeadersVisibility="Column"
                        Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="4">
</DataGrid>

就像我所说的,添加和删除行都没有问题,只是我想找到一种方法让Datagrid中的列标题在没有任何数据的情况下显示。另外,我尝试在Datagrid中使用空行启动应用程序,这确实可以使列标题出现,但看起来很凌乱。如果我在应用程序内部删除该行,则列标题将保留,但如果我在窗口加载时删除它,则它们会消失。

因此,任何帮助都将不胜感激。如果您需要更多信息,请告诉我。

2个回答

3

没错,那个方法可行,谢谢。一开始它并没有起作用,但后来我意识到我需要将每一列绑定到我的ObservableCollection的一个字段上。一旦我这样做了,它就按照我想要的方式工作了。谢谢! - Sean Cogan

0

我看到你使用了AutoGenerateColumns="True",但是你没有指定任何网格列。根据你所描述的行为,似乎一旦网格的上下文被填充,它就可以读取集合中底层对象类型的属性。在此之前,网格不知道这些属性,因此无法生成任何列。

这里没有免费的午餐,如果你想在填充上下文之前看到它们,你必须在XAML中指定网格列。


谢谢你的帮助,Snap,但是我上周已经通过Jason的答案解决了这个问题。我需要它的应用程序已经被请求者批准,所以我不再担心它了。 - Sean Cogan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接