如何从Code Behind访问x:Name?

时间:2009-11-18 13:42:36

标签: wpf datagrid

我有一个数据网格,我在其中使用DataGridTemplateColumn和DataGridTextColumn。 我想在运行时访问这些列,所以我已经为它们分配了x:Name属性。 但是我没有在代码中获得那个值,所以我寻找DataGrid,然后通过迭代DataGrid.Columns来读取对象。如何从C#中的该对象读取x:Name属性?

我需要这个在运行时对特定列执行某些特定操作。

2 个答案:

答案 0 :(得分:1)

datagrid列未添加到可视树中。 (所以也许你不能在后面的代码中访问它) - 在视觉布局上看到vinces blog

您可以查看header属性,也可以派生并添加自己的属性以唯一标识列。这就是我所做的,我发现这些列有点香草,并且已经为不同的用途提供了很多。

答案 1 :(得分:1)

另一种方法是定义附加属性:

1)使用附加属性

从DataGrid派生一个新类
Public Class FilteringDataGrid
   Inherits DataGrid


   Public Shared Function GetFilterProp(ByVal element As DependencyObject) As String
      If element Is Nothing Then
         Throw New ArgumentNullException("element")
      End If

      Return CStr(element.GetValue(FilterPropProperty))
   End Function

   Public Shared Sub SetFilterProp(ByVal element As DependencyObject, ByVal value As String)
      If element Is Nothing Then
         Throw New ArgumentNullException("element")
      End If

      element.SetValue(FilterPropProperty, value)
   End Sub

   Public Shared ReadOnly FilterPropProperty As  _
                          DependencyProperty = DependencyProperty.RegisterAttached("FilterProp", _
                          GetType(String), GetType(FilteringDataGrid), _
                          New FrameworkPropertyMetadata(Nothing))
End Class

2)在Xaml中设置道具

<dg:DataGridTextColumn local:FilteringDataGrid.FilterProp="ItemName" x:Name="dbcItemName" Header="Item" >

3)读取值