2010-12-15 5 views
2

私はTreeViewを持っていて、それぞれTreeViewNodeは、そのTagプロパティにオブジェクトを持っています。 treeviewのノードが選択されたら、DataGridに、リフレクションによって取得されたオブジェクトのすべてのフィールドの名前と値を入力します。私はwpfデータバインディングを使用してこれを行う方法を把握することはできません。単純なメソッドを使用してDataGridを正確にバインドする方法の例はほとんどなく、変換関数も使用しています。このデータをDataGridにバインドするにはどうすればよいですか?

internal static IEnumerable<Tuple<string, object>> GetFieldInfo(object o) 
{ 
    return 
     from FieldInfo info in o.GetType().GetFields() 
     select Tuple.Create(info.Name, info.GetValue(o)); 
} 

とXAMLでツリービューとデータグリッド::私はこれまで持っているもの

は、私は単一のオブジェクトから必要なデータを取得するための方法である

<TreeView Name="objectList" /> 
<DataGrid Name="objectData" /> 

私ができます」 GetFieldInfoメソッドとobjectData.ItemsSourceプロパティを使用して((TreeViewNode)objectList.SelectedItem).Tagプロパティを取得するための適切なデータバインドの呪文を見つけてください。

+0

を列とデータを自動生成可能性がありますが、私は、オブジェクトのすべてのフィールドをリストする必要があり、マスター/詳細は –

+0

に近づくためにリフレクションを使用する必要はありません(オブジェクトは任意のタイプにすることができます)とグリッド内のフィールド値を使用します。反射を使わずに私はどうしたらいいですか? – thecoop

+0

物事のカップル... TreeView.SelectedItemプロパティを使用して、Viewをかなり結合してデータをVieWModelに戻すので、Tagプロパティをスキップします。ユーザーが新しいノードを選択すると、タグからデータを抽出するのではなく、ViewModelを介してDataGridが更新されます。どのようなデータをモデルから取り出すにしても、モデル自体に値を返すために何かを置くことになります。おそらくそれを基本クラス/インタフェースで抽象化してください(そうした努力のために述べたとおり、まだ反映が必要です)。 –

答えて

0

このヘルプ、Looking for an object graph tree-view control for WPF

たい何かあなたがあなたのために使用されているオブジェクトのプロパティのいくつかの種類があった場合はそれ以外の場合、あなたはそう

<DataGrid Name="objectData" DataSource={Binding ElementName=objectList, Path=SelectedItem} /> 

のような選択されたツリービュー項目に結合することができますTreeViewは、ObjectProperty(文字列キー、オブジェクト値)などのKey/Valueオブジェクトのようなもので、ObjectPropertiesというコレクションに公開されています。そして、あなたはあなたのデータグリッドへのそれに結合し、それはあなたfror

<DataGrid Name="objectData" DataSource={Binding ElementName=objectList, Path=SelectedItem.ObjectProperties} /> 
関連する問題