2011-10-30 3 views
2

저는 WPF를 처음 접했고 해결할 수없는 문제가 있습니다. T1과 T2라는 두 개의 테이블이있는 데이터 집합이 있습니다.TreeView 및 DataGrid에 바인딩

ds.Relations.Add("RecursiveRel", 
    tables["T1"].Columns["T1Id"], 
    tables["T1"].Columns["ParentId"]); 

내가 DataView를에 결합하여 트 리뷰에서이 테이블을 표시하고 있습니다 : T1이

T1Id
ParentId
이름

이 관계 같은 순환 구조를 가지고

DvT1 = ds.Tables[0].DefaultView; 
DvT1.RowFilter = string.Format("Id = '{0}'", IdOfFirstRecord); 

및 XAML :

<TreeView ItemsSource="{Binding DvT1}"> 
    <TreeView.ItemTemplate> 
    <HierarchicalDataTemplate ItemsSource="{Binding RecursiveRel}"> 
     <TextBlock Text="{Binding Name}" /> 
    </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

이렇게하면 잘 작동하고 트리 뷰에 계층 구조가 잘 표시됩니다. 1가

T2Id T1Id 이름

:

그리고 지금 테이블 T2는 이러한 구조를 갖는 재생하게된다 여기서 n> = 0 릴레이션왔다 T1과 T2 사이의 관계

ds.Relations.Add("T1ToT2", 
    tables["T1"].Columns["T1Id"], 
    tables["T2"].Columns["T1Id"]); 

T2는 DataGrid를 사용하며 T2는 현재 선택된 T1 레코드에 연결된 레코드 만 표시해야합니다. DataGrid의 ItemsSource를 실행하려면 어떻게해야합니까? 나는 이것을 할만한 것을 찾지 못했습니다. MVVM 응용 프로그램이라는 점에 유의해야합니다. 코드 숨김은 옵션이 아닙니다.

도움을 주시면 대단히 감사하겠습니다.

+0

MVVM 응용 프로그램 인 경우 왜 이러한 이상한 테이블과 관계를 사용합니까? 모델을 보거나 데이터 세트 및 기타 동적 뷰 대신 실제 속성 및 관찰 가능한 컬렉션을 사용하도록 모든 모델을 변환하는 것이 좋습니다. – vorrtex

+0

이것은 원격 시스템 (비 Microsoft)에서 데이터를 수신하는 방법입니다. 왜이 테이블이 이상합니까? T1의 재귀 구조 때문에? – JKO

+0

문자열 리터럴 및 대괄호 때문에 처음에는 각 데이터 모델에 대한 뷰 모델을 만드는 것이 더 낫습니다. 왜냐하면'class T1ViewModel {public ObservableCollection T2Items {get; 세트; }}'훨씬 쉽고 편리합니다. – vorrtex

답변

2

시도해 보셨습니까?

<DataGrid ItemsSource="{Binding SelectedItem.T1ToT2, ElementName=theTreeView}" /> 
+0

아, 그 트릭을 했어! 메르시! 네, 저도 알다시피, 코드 숨김과 MVVM에 관해 너무 독단적이어서는 안됩니다. 또한 vorrtex의 제안을 시도하고 데이터 세트를 ObservableCollection/Properties로 변환합니다. – JKO

관련 문제