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

时间:2012-06-28 18:56:54

标签: c# wpf

我正在将一个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 个答案:

答案 0 :(得分:3)

您正在自动生成列。如果您手动定义列,即使您的集合为空,它们也会可见。

另见: WPF Toolkit Datagrid Headers and Empty Source

答案 1 :(得分:0)

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

此处没有免费午餐,如果您想在填充上下文之前查看它们,则必须在xaml中指定网格列。