Example #1
0
        /// <summary>
        /// 处理开关按钮,展开/折叠处理子节点
        /// </summary>
        /// <param name="index">Index.</param>
        protected void ToggleNode(int index)
        {
            //当前开关按钮的节点
            var node = NodesList[index];

            if (node.Node.Nodes == null)
            {
                return;
            }

            NodesList.BeginUpdate();
            //需要折叠
            if (node.Node.IsExpanded)
            {
                var range = node.Node.AllUsedNodesCount;
                if (range > 0)
                {
                    MoveSelectedIndiciesUp(index, range);

                    NodesList.RemoveRange(index + 1, range);
                }

                node.Node.PauseObservation = true;
                node.Node.IsExpanded       = false;
                node.Node.PauseObservation = false;

                node.Node.UsedNodesCount = 0;
            }
            else//需要展开
            {
                var sub_list = new ObservableList <ListNode <TItem> >();
                var used     = Nodes2List(node.Node.Nodes, node.Depth + 1, sub_list);

                MoveSelectedIndiciesDown(index, sub_list.Count);

                NodesList.InsertRange(index + 1, sub_list);

                node.Node.PauseObservation = true;
                node.Node.IsExpanded       = true;
                node.Node.PauseObservation = false;

                node.Node.UsedNodesCount = used;
            }
            NodesList.EndUpdate();
        }