从列表中加载TreeView

时间:2017-05-30 13:02:54

标签: c# wpf

我已经获得了这个XAML代码(

<TreeView x:Name="treeViewSL" Margin="10,5,875,10" Grid.Row="1">
    <TreeView.Resources>
        <HierarchicalDataTemplate 
            DataType="{x:Type OfflineSparepartEntities:ArtikelTreeNode}" 
            ItemsSource="{Binding ArtikelTreeNode}"
            >
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding NodeText}"/>                                    
            </StackPanel>
        </HierarchicalDataTemplate>                            
    </TreeView.Resources>
</TreeView>

我有2个列表给我回复正确的数据:

//Data for Root Element
var root = svc.GetRootArtikelTreeNode(WebSLList, eqNr, LanguageCode.D);

//Data for Child
var _childNodes = svc.GetChildArtikelTreeNodes(WebSLList, eqNr, _childParentId, LanguageCode.D);

我已经尝试了

 treeViewSL.ItemsSource = root.NodeText.ToList();
 treeViewSL.Items.Refresh(); 

然后我才回复这个:

enter image description here

所以只有根元素分裂..

我如何在具有根节点和子节点的普通TreeNode中获得此功能

1 个答案:

答案 0 :(得分:1)

  

treeViewSL.ItemsSource = root.NodeText.ToList();

对我来说似乎非常错误,字符串上的Linq函数 ToList()会返回一个列表中的所有字符。如果我正确理解了您的概念,您需要1个根节点和x个子节点。为此,所有对象应具有相同的类型。如果你有一个简单的类(或接口) TreeItem(Header:string,Childs:IEnumerable),你可以将TreeView的ItemsSource设置为这些代码的列表:

<HierarchicalDataTemplate [...] ItemsSource="{Binding Childs}">

将链接到子集合。然后,您可以在DataTemplate中访问该对象的属性。

编辑: 这是一个有效的例子:

public class TreeItem
{
    public string Header { get; set; }
    public IEnumerable<TreeItem> Childs { get; set; }
}

    var items = new List<TreeItem>
    {
        new TreeItem
        {
            Header = "This is the root",
            Childs = new[]
            {
                new TreeItem {Header = "Child item 1"},
                new TreeItem {Header = "Child item 2"}
            }
        }
    };

    treeViewSL.ItemsSource = items;