我已经获得了这个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();
然后我才回复这个:
所以只有根元素分裂..
我如何在具有根节点和子节点的普通TreeNode中获得此功能
答案 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;