如何动态填充wpf中的treeview

Chh*_*rma 3 c# wpf treeview xaml wpf-4.0

我是WPF的新人

在xaml上的Treeview代码

<Window x:Class="WpfApplication1.orderdetail" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="250" Width="450">

<Window.Resources>
    <HierarchicalDataTemplate x:Key="NodeTemplate">
        <TextBlock x:Name="text" Text="?" />
        <HierarchicalDataTemplate.ItemsSource>
            <Binding XPath="child::node()" />
        </HierarchicalDataTemplate.ItemsSource>
        <HierarchicalDataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="Text">
                <Setter TargetName="text" Property="Text" Value="{Binding Path=Value}"></Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=NodeType}" Value="Element">
                <Setter TargetName="text" Property="Text" Value="{Binding Path=Name}"></Setter>
            </DataTrigger>
        </HierarchicalDataTemplate.Triggers>
    </HierarchicalDataTemplate>
    <XmlDataProvider x:Key="xmlDataProvider"></XmlDataProvider>
</Window.Resources>

<Grid >
    <TreeView Name="treeView1"
          Background="AliceBlue"
          ItemsSource="{Binding Source={StaticResource xmlDataProvider}, XPath=*}"
          ItemTemplate= "{StaticResource NodeTemplate}"/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

cs文件

 public partial class orderdetail : Window
{
    public int OID { get; set; }
    public orderdetail()
    {
        InitializeComponent();
    }

    private void Bindtree(int orderid)
    {
        string xml = "xml content will be here from api method";
        XmlDataProvider dataProvider = this.FindResource("xmlDataProvider") as XmlDataProvider;
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(xml);
        dataProvider.Document = doc;

    }
}
Run Code Online (Sandbox Code Playgroud)

我不想将treeview与窗口InitializeComponent事件绑定,如下所示

    public orderdetail()
    {
        InitializeComponent();
        Bindtree(1);
    }
Run Code Online (Sandbox Code Playgroud)

我将动态值传递到此页面以获取绑定树视图,如下所示

 orderdetail orderdetail = new orderdetail();
 orderdetail.OID = Convert.ToInt32(1);
 orderdetail.Show();
Run Code Online (Sandbox Code Playgroud)

是否有任何事件/方法可以动态地绑定树视图?

谢谢CP

Pav*_*gin 7

使用WPF,您应该利用MVVM模式.我已经看到了一个关于使用TreeViewMVVM 的非常好的教程:http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode