WPF如何将自参照数据集绑定到树视图 [英] WPF how to bind self-referential dataset to a treeview

查看:171
本文介绍了WPF如何将自参照数据集绑定到树视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是WPF的初学者。我想将包含节点和关系的以下 DataSet 绑定到一个 TreeView 。数据集是:

  internal static DataSet getData()
{
DataTable dt = new DataTable数据);
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,宝马);
dt.Rows.Add(6,2,雷克萨斯);
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);

//添加关系

ds.Relations.Add(rsParentChild
,ds.Tables [data]。列[Id]
,ds.Tables [data]。列[ParentId]);

return ds;
}

我想拥有:





现在我通过检索所有datatable和ading节点到树视图来实现这一点。但是,我希望有一个直接的 XAML 绑定。



我想补充说,数据集将动态变化,可能有很多嵌套级别。谢谢。

解决方案

这是一个简单的解决方案:



strong>代码隐藏

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

私有DataView _rootNodes;
public DataView RootNodes
{
get {return _rootNodes; }
}

内部静态DataSet getData()
{
...
}

}

XAML

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


I am a total beginner in WPF. I would like to bind the following DataSet containing nodes and relations to a TreeView. The dataset is:

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;
} 

I would like to have:

Now I achieve this by resursive retrieveing all datatable and ading nodes to the treeview. However, I hope there is a direct XAML binding.

I'd like to add that the dataset will be dynamically changing and there might many nesting levels. Thanks.

解决方案

Here's a simple solution that works :

Code-behind

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>

这篇关于WPF如何将自参照数据集绑定到树视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆