I have a List<T> object. It has a children from the same type (Tree[].Tree[].Tree[]...). How can i use this structure, to show as a tree?
This is my class and list from it:
class Tree{
public string Name { get; set; }List<Tree> children;
}
xamDataTree.ItemsSource = List<Tree> object
Where is my error? I can see only the root level of the tree.
Hi Synthy,
I suppose that in your XAML you missed definition of 'NodeLayout'.In XAML your tree shoud be:
<ig:XamDataTree x:Name="dataGlobalTree" ItemsSource="{Binding Object}" > <ig:XamDataTree.GlobalNodeLayouts> <ig:NodeLayout Key="Data" DisplayMemberPath="Name" TargetTypeName="Tree"></ig:NodeLayout> </ig:XamDataTree.GlobalNodeLayouts></ig:XamDataTree>
Hi Tanya,thank you about your answer. I did make what you said, but i still can see only the root element. This is my code, now a concrete example:
the C# code about helper class:
public class navigatorTree { public ACIDServices.NavigatorRole element { get; set; } public List<navigatorTree> children;
public static List<navigatorTree> getNavigatorTree(List<ACIDServices.NavigatorRole> tree) { List<navigatorTree> result = new List<navigatorTree>(); navigatorTree tempElement = new navigatorTree(); List<ACIDServices.NavigatorRole> tempResult = tree.FindAll(delegate(ACIDServices.NavigatorRole p) { return p.HID == 0; }); foreach (ACIDServices.NavigatorRole navRole in tempResult) { tempElement = new navigatorTree(); tempElement.element = navRole; tempElement.children = getSubNavigatorTree(navRole, tree); result.Add(tempElement); } return result; }
The code, which i use to databind the xamDataTree:
List<ACIDServices.NavigatorRole> navigatorRole = new List<ACIDServices.NavigatorRole>(); asc.GetNavigator(out navigatorRole, SESSION.Session.Get("SessionID").ToString(), (int)SESSION.Session.Get("ofpRoleID"), true); Resources.Add("navigatorTree", ACID_WPF_FE.AppGlobalCode.treeHelper.getNavigatorTree(navigatorRole));
// Now i have a hierarchical List from navigatorTree. The property "children" has more items from navigatorTree, which has another children with list of navigatorTree...
and the XAML:
<ig:XamDataTree HorizontalAlignment="Left" Name="xamDataTree1" VerticalAlignment="Top" ItemsSource="{DynamicResource navigatorTree}" Width="125"> <ig:XamDataTree.GlobalNodeLayouts> <ig:NodeLayout Key="element" TargetTypeName="ACID_WPF_FE.AppGlobalCode.navigatorTree" DisplayMemberPath="element.NAME" /> </ig:XamDataTree.GlobalNodeLayouts> </ig:XamDataTree>
and after F5, i can see only the first level from datasource (List<navigatorTree>) :(
In the Example browser, i saw that the itemsSource is in XML. Is it the key from the house?
Hi Tania,thank you very much about your example (it was very helpfully). Now everything is OK. Just.. I am an idiot. The error was, that i did not have a constructor for navigatorTree class. The class now is:
public class navigatorTree { public navigatorTree() { element = new ACIDServices.NavigatorRole(); children = new List<navigatorTree>(); } public ACIDServices.NavigatorRole element { get; set; } public List<navigatorTree> children { get; set; } }
And i can see the whole tree.
Thank you very much, again!
Best RegardsSimo
@---,--'----
Hi Simeon,
Sorry for the late reply.
I can’t see anything wrong in your code. Therefore I attached sample – and you can review it. Please let me know if that help you to find the problem.
Hello Tanya,something about my problem? Probably not... It is very bad :(