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 中使用空行启动应用程序,这确实使列标题出现,但看起来很乱。如果我从应用程序中删除该行,列标题仍然存在,但如果我在窗口加载时将其删除,它们就会消失。

因此,任何帮助将不胜感激。让我知道您是否需要更多关于我的信息。

4

2 回答 2

3

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

另请参阅: WPF Toolkit Datagrid Headers and Empty Source

于 2012-06-28T19:20:15.807 回答
0

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

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

于 2012-07-03T17:15:39.743 回答