Beispiel #1
0
        private static void ExpandAndSelectUaNodeXamTree(UaFindNodeResult findedNodeResult, XamDataTree xamTree)
        {
            if (!findedNodeResult.FdUaNodeId.HasValue)
            {
                return;
            }

            //Родитель через который идет переход на обычные узлы FreeHierarchy
            var parentNode = UAHierarchyDictionaries.UANodesDict[findedNodeResult.FdUaNodeId.Value];

            if (parentNode == null)
            {
                return;
            }

            //Непосредственный родитель
            var pathToFounded = new ConcurrentStack <object>();

#if DEBUG
            var sw = new System.Diagnostics.Stopwatch();
            sw.Start();
#endif
            var foundedObject = FinderHelper.FindFirstElementAsync(xamTree.ItemsSource as IEnumerable <object>, parentNode, pathToFounded);
#if DEBUG
            sw.Stop();
            Console.WriteLine("Поиск 1 {0} млс", sw.ElapsedMilliseconds);
#endif
            var treeItem = foundedObject as FreeHierarchyTreeItem;
            if (treeItem != null && treeItem.Descriptor != null)
            {
                //Подгружаем объекты
                treeItem.ReloadUaNodeBranch(new Queue <long>(findedNodeResult.ParentIds.Skip(1)));
            }
            pathToFounded.Clear();

#if DEBUG
            sw.Restart();
#endif
            foundedObject = FinderHelper.FindFirstElementAsync(xamTree.ItemsSource as IEnumerable <object>, findedNodeResult.Node, pathToFounded);
#if DEBUG
            sw.Stop();
            Console.WriteLine("Поиск 2 {0} млс", sw.ElapsedMilliseconds);
#endif
            //На данный момент объект подгружен, просто позиционируем на него
            if (foundedObject != null && pathToFounded.Count > 0)
            {
                xamTree.ExpandAndSelectXamTreeAsync(pathToFounded, false);
            }
        }
Beispiel #2
0
        public static void ExpandAndSelectXamTree(Stack stack, object selItem,
                                                  XamDataTree xamTree, bool isExpandLast = false, bool isSelect = true)
        {
            if (stack != null)
            {
                var hierItem = selItem as FreeHierarchyTypeTreeItem;
                if (hierItem != null)
                {
                    var stackTree = new Stack <FreeHierarchyTypeTreeItem>();

                    for (int i = stack.Count - 1; i >= 0; i--)
                    {
                        stackTree.Push(stack.ToArray()[i] as FreeHierarchyTypeTreeItem);
                    }

                    xamTree.ExpandAndSelectXamTree(stackTree, isExpandLast, isSelect);
                }
                else
                {
                    var arr = new object[stack.Count];
                    stack.CopyTo(arr, 0);
                    Array.Reverse(arr);

                    var chain = new ConcurrentStack <object>(arr);
                    xamTree.ExpandAndSelectXamTreeAsync(chain, isExpandLast);
                }
                //MoveUp(xamTree);
            }
            // Если элемент не найден в дереве, то нужно подгрузить ветку
            else
            {
                var findedNodeResult = selItem as UaFindNodeResult;
                if (findedNodeResult != null)
                {
                    ExpandAndSelectUaNodeXamTree(findedNodeResult, xamTree);
                    //MoveUp(xamTree);
                }
                else
                {
                    ExpandAndSelectHierObject(selItem, xamTree);
                }
            }
        }