Скрыть свойство из наблюдаемой коллекции
Итак, у меня есть 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
Есть много дочерних классов с различными свойствами, поэтому я не могу легко определить столбцы таблицы данных напрямую.
Я хочу иметь возможность скрыть определенные родительские свойства из сетки данных (например, никогда не показывать свойство заголовка в сетке данных), но при этом иметь возможность использовать его для привязки данных в другом месте (например, в метке).
Это возможно? Я не могу думать, как это сделать, не указав вручную каждый столбец для каждого возможного класса вместо использования привязки данных.
1 ответ
При автоматической генерации столбцов вы можете изменить поведение каждого свойства с помощью аннотаций данных, в данном случае, в частности, BrowsableAttribute
учебный класс:
<Browsable(False)>
Аннотирование вашего свойства этим препятствует созданию столбца при использовании следующего обработчика событий для события AutoGeneratingColumn объекта DataGrid.
Private Sub OnAutoGeneratingColumn(sender As Object, e As DataGridAutoGeneratingColumnEventArgs)
If Not DirectCast(e.PropertyDescriptor, PropertyDescriptor).IsBrowsable Then
e.Cancel = True
End If
End Sub
Не забудьте добавить сборку Data Annotations в ваш проект.