public override DataTemplate SelectTemplate(object item, DependencyObject container) { DataTemplate retval = null; FrameworkElement element = container as FrameworkElement; if (element != null && item != null && item is NavigatorItemViewModel) { NavigatorItemViewModel hierarchyItem = item as NavigatorItemViewModel; if (hierarchyItem.DataItem != null) { if (hierarchyItem.DataItem.GetType() == typeof(ProjectModel)) { retval = element.FindResource("ProjectTemplate") as DataTemplate; } else if (hierarchyItem.DataItem.GetType() == typeof(ControllerModel)) { retval = element.FindResource("ControllerTemplate") as DataTemplate; } else if (hierarchyItem.DataItem.GetType() == typeof(ControllerNodeModel)) { retval = element.FindResource("ControllerNodeTemplate") as DataTemplate; } else if (hierarchyItem.DataItem.GetType() == typeof(LoopModel)) { retval = element.FindResource("LoopTemplate") as DataTemplate; } } } return(retval); }
public void Initialize(List <ProjectModel> projects, object selectedEntity) { // 项目级别信息集合 var projectHierarchyItemsList = new List <NavigatorItemViewModel>(); foreach (var p in projects) { // 为项目信息创建导航节点 var projectHierarchyItem = new NavigatorItemViewModel(p); projectHierarchyItemsList.Add(projectHierarchyItem); // 判断当前节点是否为选中节点 if (selectedEntity != null && selectedEntity.GetType() == typeof(ProjectModel) && (selectedEntity as ProjectModel).Equals(p)) { _selectedItem = projectHierarchyItem; } // 判断项目下是否有控制器节点 if (p.Controllers.Count != 0) { // 创建“控制器”导航节点 var controllerHierarchyItemsList = new List <NavigatorItemViewModel>(); foreach (var c in p.Controllers) { // 为“控制器信息”创建导航节点 var controllerHierarchyItem = new NavigatorItemViewModel(c); controllerHierarchyItem.Parent = projectHierarchyItem; controllerHierarchyItemsList.Add(controllerHierarchyItem); // 判断当前节点是否为选中节点 if (selectedEntity != null && selectedEntity.GetType() == typeof(ControllerModel) && (selectedEntity as ControllerModel).Equals(c)) { _selectedItem = controllerHierarchyItem; } #region 根据控制器类型获取配置的节点 IControllerConfig config = ControllerConfigManager.GetConfigObject(c.Type); ControllerNodeModel[] nodeModel = config.GetNodes(); #endregion if (nodeModel.Length != 0) { var controllerNodeHierarchyItemList = new List <NavigatorItemViewModel>(); foreach (var cNode in nodeModel) { //为“控制器节点类型”创建导航节点 var nodeHierarchyItem = new NavigatorItemViewModel(cNode); nodeHierarchyItem.Parent = controllerHierarchyItem; controllerNodeHierarchyItemList.Add(nodeHierarchyItem); if (selectedEntity != null && selectedEntity.GetType() == typeof(ControllerNodeModel) && (selectedEntity as ControllerNodeModel).Equals(cNode)) { _selectedItem = controllerHierarchyItem; } //如果节点类型为“回路”,需要为其增加“回路号”导航节点 if (cNode.Type == ControllerNodeType.Loop) //回路数据应该加载回路信息 { if (c.Loops.Count > 0) //加载回路数据 { var loopHierarchyItemList = new List <NavigatorItemViewModel>(); foreach (var l in c.Loops) { //为回路信息创建导航节点 var loopHierarchyItem = new NavigatorItemViewModel(l); loopHierarchyItem.Parent = nodeHierarchyItem; loopHierarchyItemList.Add(loopHierarchyItem); if (selectedEntity != null && selectedEntity.GetType() == typeof(LoopModel) && (selectedEntity as LoopModel).Equals(l)) { _selectedItem = loopHierarchyItem; } } nodeHierarchyItem.Children = new CollectionView(loopHierarchyItemList); } } } controllerHierarchyItem.Children = new CollectionView(controllerNodeHierarchyItemList); } } projectHierarchyItem.Children = new CollectionView(controllerHierarchyItemsList); } } this.Projects = new CollectionView(projectHierarchyItemsList); // 设置选中节点状态,并展开当前选中节点 if (_selectedItem != null) { _selectedItem.IsSelected = true; NavigatorItemViewModel current = _selectedItem.Parent; while (current != null) { current.IsExpanded = true; current = current.Parent; } } }