I have an MVVM WPF app with a RadTreeListView that is populated via a Generic List<T> using nested sets from a database. Only the first column of the TreeListView gets populated. What class would be appropriate to replace the generic List so that I can pass multiple columns of data to the TreeListView?
I posted this same question, with code, on the WPF Forum of MSDN and was told that my existing approach with List<T> should work with the TreeListView. I was also told that since the question involves a third party control, i.e., Telerik, I should move the question to the Telerik forum.
My xaml showing the data binding:
The "Description" and "Imported Equipment Type" columns do not get populated.
The constructor for my navigator ViewModel is:
And the service that fills the list:
All of this works except that the tree is populated only in the "Tag" column. "Description" and "Imported Equipment Type" are blank.
I posted this same question, with code, on the WPF Forum of MSDN and was told that my existing approach with List<T> should work with the TreeListView. I was also told that since the question involves a third party control, i.e., Telerik, I should move the question to the Telerik forum.
My xaml showing the data binding:
<telerik:RadTreeListView.Columns> <telerik:GridViewDataColumn DataMemberBinding="{Binding Tag}" Header="Tag" Width="Auto"/> <telerik:GridViewDataColumn DataMemberBinding="{Binding Description}" Header="Description" Width="Auto" /> <telerik:GridViewDataColumn DataMemberBinding="{Binding ImportedEquipmentType}" Header="Imported Equipment Type" Width="Auto"/> </telerik:RadTreeListView.Columns>My code for my data class is as follows. My xaml ItemSource is bound to Children:
public class TagItem{ public List<TagItem> _children = new List<TagItem>(); public List<TagItem> Children { get { return _children; } } public string EquipmentID { get; set; } public string SystemID { get; set; } public string Tag { get; set; } public string TagNodeText { get; set; } public string Tag2 { get; set; } public string Description { get; set; } public string Description2 { get; set; } public string ImportedEquipmentType { get; set; } public string ManuallyAdded { get; set; } public string ParentID { get; set; } public string NodeLeft { get; set; } public string NodeRight { get; set; } public string Depth { get; set; } public string Mpath { get; set; }}The constructor for my navigator ViewModel is:
readonly EquipmentListTreeViewModel _equipmentTree;public EquipmentListNavigator(){ InitializeComponent(); // Get raw family tree data from a database. TagItem rootTagItem = Database.GetEquipmentTree(); // Create UI-friendly wrappers around the // raw data objects (i.e. the view-model). _equipmentTree = new EquipmentListTreeViewModel(rootTagItem); // Let the UI bind to the view-model. base.DataContext = _equipmentTree;}And the service that fills the list:
public static TagItem GetEquipmentTree(){ nTI.Tag = "ASSET REGISTER"; FillTreeView("", nTI); return nTI;}private static void FillTreeView(string currKeyRoot, TagItem nTI = null){ DataRows.MyRow row = drows.GetNextRow(); while (row != null) { if (NodeStartsWith(row.MPath, currKeyRoot)) { TagItem tnChild = new TagItem(); tnChild.SystemID = row.SystemID; tnChild.EquipmentID = row.EquipmentID; tnChild.Description = row.Description; tnChild.ParentID = row.ParentID; tnChild.Mpath = row.MPath; tnChild.Depth = row.Depth; tnChild.Tag = row.Tag; tnChild.Tag2 = row.Tag2; tnChild.Description2 = row.Description2; tnChild.ImportedEquipmentType = row.ImportedEquipmentType; tnChild.ManuallyAdded = row.ManuallyAdded; tnChild.NodeLeft = row.NodeLeft; tnChild.NodeRight = row.NodeRight; nTI.Children.Add(tnChild); FillTreeView(row.MPath, tnChild); } else { drows.MovePrev(); return; } row = drows.GetNextRow(); }All of this works except that the tree is populated only in the "Tag" column. "Description" and "Imported Equipment Type" are blank.