【问题标题】:Hide a property from an observablecollection隐藏 observablecollection 中的属性
【发布时间】:2014-10-26 12:03:20
【问题描述】:

所以我有一个 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

有许多具有不同属性的子类,因此我不能轻松地直接定义数据网格列。

我希望能够从数据网格中隐藏某些父属性(例如,从不显示数据网格中的标题属性),同时仍然能够将其用于其他地方的数据绑定(例如标签)。

这可能吗?如果不手动为每个可能的类指定每一列而不是使用数据绑定,我想不出该怎么做。

【问题讨论】:

  • 是否自动生成列?
  • 是的,我是 - 所以我不必告诉它为每个不同的类使用哪些列

标签: wpf vb.net data-binding datagrid


【解决方案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 程序集添加到您的项目中。

【讨论】:

  • 谢谢。这是在哪个命名空间中? Intellisense 似乎找不到它
  • @simonalexander2005 单击我的答案中的链接,它位于程序集中的System.ComponentModel.DataAnnotations 命名空间中,具有相同的名称。
  • 啊,这是一个链接!!对不起,明白了。谢谢:)
  • hmm “AutoGenerateField = False”给出错误“AutoGenerateField 未声明。由于其保护级别,它可能无法访问”
  • 我想我修好了 - 应该是“AutoGenerateField:=False”,对吧?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 2018-01-15
  • 2012-07-01
  • 2012-11-21
  • 2018-07-15
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多