2012-06-28 57 views
3

我正在將一個Silverlight應用程序移植到WPF中,以便在工作中使用該項目,並且我遇到了一個小型化妝品問題。在Silverlight應用程序中,Datagrid的ItemsSource是最初爲空的ObservableCollection。當我第一次加載應用程序時,即使DataGrid本身爲空,也會顯示列標題。我現在試圖在WPF應用程序中實現相同的功能。 ObservableCollection和Datagrid都是相同的,但現在列標題僅在向Datagrid添加行時纔會顯示。我的DataGrid中的XAML如下:如何使DataGrid始終在WPF中顯示其列標題?

<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中的空行來啓動應用程序,這確實會使列標題出現,但看起來很亂。如果我從應用程序中刪除該行,列標題將保留,但如果我在窗口加載時將其刪除,則它們將消失。

所以,任何幫助,將不勝感激。讓我知道你是否需要我更多的東西。

回答

3

您正在自動生成列。如果您手動定義列,即使您的收藏集爲空,它們也將可見。

另見: WPF Toolkit Datagrid Headers and Empty Source

+0

是的,工作,謝謝。它一開始並沒有工作,但後來我意識到我需要將每列綁定到我的ObservableCollection的一個字段。一旦我做到了,它就是我想要的。謝謝! –

0

我看你的AutoGenerateColumns = 「真」,但是,你不指定任何網格列。從你描述的行爲看來,一旦網格的上下文被填充,它可以讀取集合中底層對象類型的屬性。在此之前,網格不知道這些屬性,因此不能生成任何列。

這裏沒有免費的午餐,如果您想在填充上下文之前查看它們,您必須在xaml中指定網格列。

+0

感謝您的幫助,Snap,但我已經在上週用Jason的回答處理了這個問題。我需要它的應用程序已經被請求者批准了,所以我不再擔心它了。 –