2010-11-18 9 views
3

私はWPFの初心者です。私はノードと関係を含む次のDataSetTreeViewにバインドしたいと思います。データセットは次のとおりです。WPF自己参照データセットをツリービューにバインドする方法

internal static DataSet getData() 
{ 
    DataTable dt = new DataTable("data"); 
    dt.Columns.Add("Id", typeof(int)); 
    dt.Columns.Add("ParentId", typeof(int)); 
    dt.Columns.Add("NodeDescription"); 

    dt.Rows.Add(1, null, "Employees"); 
    dt.Rows.Add(2, null, "Cars"); 
    dt.Rows.Add(3, 1, "Men"); 
    dt.Rows.Add(4, 1, "Women"); 
    dt.Rows.Add(5, 2, "BMW"); 
    dt.Rows.Add(6, 2, "Lexus"); 
    dt.Rows.Add(7, 3, "Adam Kowalski"); 
    dt.Rows.Add(8, 3, "Dawid Nowacki"); 
    dt.Rows.Add(9, 4, "Ilona Wacek"); 

    DataSet ds = new DataSet(); 
    ds.Tables.Add(dt); 

    //add a relationship 

    ds.Relations.Add("rsParentChild" 
    ,ds.Tables["data"].Columns["Id"] 
    ,ds.Tables["data"].Columns["ParentId"]); 

    return ds; 
} 

私が持っているしたいと思います:

alt text

今、私はツリービューにresursive retrieveingにより、すべてのDataTableとadingノードをこれを達成します。しかし、直接XAMLバインディングがあることを願っています。

私は、データセットが動的に変化し、多くの入れ子レベルが存在すると付け加えたいと思います。ありがとう。

答えて

5

ここで働く簡単なソリューションです:

コードビハインド

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
     var dataSet = getData(); 
     _rootNodes = dataSet.Tables["data"].DefaultView; 
     _rootNodes.RowFilter = "ParentId IS NULL"; 
     this.DataContext = this; 
    } 

    private DataView _rootNodes; 
    public DataView RootNodes 
    { 
     get { return _rootNodes; } 
    } 

    internal static DataSet getData() 
    { 
     ... 
    } 

} 

XAML

<TreeView ItemsSource="{Binding RootNodes}"> 
     <TreeView.ItemTemplate> 
      <HierarchicalDataTemplate ItemsSource="{Binding rsParentChild}"> 
       <TextBlock Text="{Binding NodeDescription}" /> 
      </HierarchicalDataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 
+0

ブリリアントは!ありがとう。 – nan

+0

Entityフレームワークテーブルはどうですか? – ARZ

+0

データソースとしてオブジェクトのリストを使ってこれをどうやって実現できますか?私はこの答えを見つけました:http://stackoverflow.com/questions/14161963/how-to-bind-self-referencing-table-to-wpf-treeviewしかし、私はそこに記載されているコンバータを理解することができません。 – Lorgarn