2014-09-02 202 views
0

所以我有一個WPF的DataGrid綁定到一個ObservableCollection,其中包含一類的單個實例 - 例如:隱藏屬性

Public Class parent 
    Public Property title As String [...] 
    Public Property someCommonThing as Integer [...] 

Public Class Child Inherits Parent 
    Public Property name As String [...] 
    Public Property address As String [...] 

Public Class Window1 
    Dim oc As ObservableCollection(Of Object) = New ObservableCollection(Of Object) 
    oc.Add(New Child()) 
    dataGrid.ItemsSource = oc 

有很多子類具有不同的特性,因此爲什麼我無法直接定義datagrid列。我希望能夠從數據網格中隱藏某些父屬性(例如,從不在數據網格中顯示標題屬性),同時仍然可以將它用於其他地方的數據綁定(例如標籤)。

這可能嗎?如果不手動指定每個可能的類的每個列而不使用數據綁定,我無法考慮如何去做。

+0

您是否自動生成列? – Bas 2014-09-02 09:10:32

+0

是的,我是 - 所以我不必告訴它哪個列用於每個不同的類 – simonalexander2005 2014-09-02 09:33:30

回答

1

當自動生成列,您可以更改使用數據註釋的每財產的行爲,在這種情況下,特別是BrowsableAttribute類:

<Browsable(False)> 

這個註解你的財產將阻止一列從使用時所產生的在DataGrid的AutoGeneratingColumn事件之後的事件處理程序。

Private Sub OnAutoGeneratingColumn(sender As Object, e As DataGridAutoGeneratingColumnEventArgs) 
    If Not DirectCast(e.PropertyDescriptor, PropertyDescriptor).IsBrowsable Then 
     e.Cancel = True 
    End If 
End Sub 

記得將DataAnnotations程序集添加到您的項目中。

+0

謝謝。這是哪個命名空間? Intellisense似乎無法找到它 – simonalexander2005 2014-09-02 09:33:03

+0

@ simonalexander2005點擊我答案中的鏈接,它位於程序集中名稱空間中的'System.ComponentModel.DataAnnotations'中。 – Bas 2014-09-02 09:33:57

+0

啊,這是一個鏈接!對不起,明白了。謝謝:) – simonalexander2005 2014-09-02 09:40:35