2009-11-18 4 views
2

DataGridTemplateColumn과 DataGridTextColumn을 사용하는 DataGrid가 있습니다. 런타임에이 열에 액세스하여 x : Name 속성을 할당했습니다. 하지만 코드에서 그 값을 얻지 못하고 DataGrid를 찾고 DataGrid.Columns를 반복하여 개체를 읽습니다. C#에서 해당 개체의 x : Name 속성을 어떻게 읽을 수 있습니까?코드 숨김에서 x : 이름에 액세스하려면 어떻게해야합니까?

런타임시 특정 열과 관련된 특정 작업을 수행하려면이 기능이 필요합니다.

답변

1

datagrid 열이 시각적 트리에 추가되지 않습니다. (어쩌면 당신은 이것 때문에 뒤에 코드에서 액세스 할 수 없습니다) - 비주얼 레이아웃에 vinces blog을 참조하십시오.

머리글 속성을 살펴 보거나 고유 한 속성을 파생시켜 추가하여 열을 고유하게 식별 할 수 있습니다. 그게 내가하는 일입니다. 칼럼을 조금 바닐라로 만들었고 다른 용도로 사용하기에 알맞은 소수를 만들어 냈습니다.

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

XAML

에 연결된 속성

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) 세트와 지지대를 데이터 그리드에서

1) 새로운 클래스를 유도 :

+0

하지만 코드에서 x : Name을 읽는 것이 쉽지는 않습니다. ee [액세스하는 방법 x : 이름 속성 - FrameworkElement 이외의 개체?] (http://stackoverflow.com/a/7172430/575530) – dumbledad

+0

시각 트리를 걷기 시작하면 문제가 생겨 반사를 추가합니다. 그것은 지저분해질 수 있습니다. –

1

다른 대안 연결된 속성을 정의하는 것이다 3) 값을 읽으십시오.

+0

그건 아주 좋은 해결책이고, 어떻게 든 명백하지 않습니다. – deafsheep

관련 문제