Скрыть свойство из наблюдаемой коллекции

Итак, у меня есть 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 в ваш проект.

Другие вопросы по тегам