我正在将一个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中使用空行启动应用程序,这确实使列标题出现,但它看起来很乱。如果我从应用程序中删除该行,则列标题仍然存在,但如果我在窗口加载时删除它,它们就会消失。
所以,任何帮助将不胜感激。如果您需要更多内容,请告诉我。
答案 0 :(得分:3)
您正在自动生成列。如果您手动定义列,即使您的集合为空,它们也会可见。
答案 1 :(得分:0)
我看到你有AutoGenerateColumns =“True”,但是,你没有指定任何Grid列。从您描述的行为来看,似乎一旦填充了网格的上下文,它就可以读取集合中底层对象类型的属性。在此之前,网格不了解这些属性,因此无法生成任何列。
此处没有免费午餐,如果您想在填充上下文之前查看它们,则必须在xaml中指定网格列。