2012-10-04 3 views
0

그래서 저는 WPF 클럽에 Winforms에서 몇 년 동안 손을 대고 있습니다. WPF에서 databinding을 확실히 enjoing하고 있지만 DataGrid에 문제가 있습니다.DataBinding DataGrid를 사용자 지정 데이터 구조

SQL 쿼리의 결과를 저장하는 고도로 사용자 지정된 데이터 구조가 있습니다.이 쿼리는 WPF에서 계속 사용하고 싶습니다. 개체 목록에 바인딩 예제를 보았지만 SQL 쿼리와 같이 동적 인 것은 아닙니다.

DataGrid이 행 번호, 헤더 및 데이터 행 &과 같은 필요한 정보를 얻을 수 있도록 데이터 구조를 구현할 수있는 인터페이스가 있습니까?

답변

0

내 목표는 DataGrid 내 구조에 대한 정보를 "발견"할 수 있도록하는 DataTable 유사한 내 사용자 정의 구조에 결합하는 것이었다.

This Question이 처리에 많은 도움이 CustomTypeDescriptor에서 상속 (또는 ICustomTypeDescriptor를 구현)뿐만 아니라

IList IEnumerable ITypedList

:

짧은 대답은 다음과 같은 인터페이스를 구현하는 것입니다 CustomTypeDescriptor 가장 힘들었던 물건.

내 열거 형 개체는 기본 테이블에 다시 참조를 저장 한 개체로, 특정 행과 열의 값이 무엇인지 물어볼 수 있습니다.

public AgilityTableRow(AgilityTableBase table, int rowIndex) 
    { 
     _table = table; 
     _rowIndex = rowIndex; 
    } 

    public object this[int columnIndex] 
    { 
     get 
     { 
      return _table[columnIndex, _rowIndex]; 
     } 
    } 

    public object this[string columnName] 
    { 

     get 
     { 
      return _table[_table.GetFieldIndex(columnName), _rowIndex]; 
     } 
    } 

참고 :이 클래스는 ICustomTypeDescriptor를 구현해야하고 단순히 속성을 얻기 위해 테이블에 전화를 전달할 수 있습니다 :

public PropertyDescriptorCollection GetProperties() 
    { 
     return _table.GetProperties(); 
    } 
0

항목이에서 INotifyPropertyChanged를 구현해야 그리드 변경에 대해 통지되도록 당신은 ObservableCollection에 <>에 넣어해야합니다.

AutoGenerateColumns를 true로 설정하면 Grid가 자동으로 모델의 각 속성에 대한 열을 만듭니다.

"원시"데이터가없고 모델 클래스가 없다면 수동으로 열을 만들어야한다고 생각합니다. WPF 바인딩은 매우 유연합니다. 인덱싱 된 속성/배열 등에 바인딩하는 것도 가능합니다. "동적"데이터로 도움이 될 수 있습니다.

<TextBlock Text="{Binding myArray[0]}" /> 
관련 문제