2011-10-30 17 views
2

私はWPFには新しく、解決できない問題があります。 T1とT2の2つのテーブルを持つデータセットがあります。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 N> = 0の関係があったT1とT2との間の関係

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

T2はDataGridを使用しており、現在選択されているT1レコードにリンクされているレコードのみを表示する必要があります。 これを実現するには、DataGridのItemsSourceにはどのような要素が必要ですか?私はこれをする何かを見つけていない。 これはMVVMアプリケーションであることに注意してください。コードビハインドはオプションではありません。

ご協力いただきまして誠にありがとうございます。

+0

MVVMアプリケーションの場合、なぜこれらの奇妙なテーブルとリレーションシップを使用しますか?モデルを表示し、データセットやその他の動的ビューではなく、実際のプロパティと観測可能なコレクションを使用するように、すべてのモデルを変換することをお勧めします。 – vorrtex

+0

これは、リモートシステム(Microsoft以外)からデータを受信する方法です。なぜこれらのテーブルは奇妙なのですか? T1の再帰的構造のために? – JKO

+0

文字列リテラルと角かっこのためです。最初に、各データモデルのビューモデルを作成する方が良いでしょう。なぜなら、クラスのようなクラスへのバインディングは、クラスT1ViewModel {public ObservableCollection T2Items {get;セット; }} 'ははるかに便利で簡単です。 – vorrtex

答えて

2

これを試しましたか?

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

ああ、それはトリックでした!メルシ!はい、私は知っています、私はコードビハインドとMVVMについてあまりにも独断的であってはいけません。私はvorrtexの提案を試し、データセットをObservableCollection/Propertiesに変換します。 – JKO

関連する問題