Esempio n. 1
0
        void CollectionChanged()
        {
            if ((nodes == null) || (nodes.Count == 0))
            {
                return;
            }

            nodes.BeginUpdate();

            foreach (var node in nodes)
            {
                var node_parent = node.Parent;

                if (node_parent != this)
                {
                    if ((node_parent != null) && (node_parent.Nodes != null))
                    {
                        if (ReferenceEquals(nodes, node_parent.Nodes))
                        {
                            node_parent.Nodes = new ObservableList <TreeNode <TItem> >();
                        }
                        else
                        {
                            node_parent.Nodes.Remove(node);
                        }
                    }

                    node.parent = new WeakReference(this);
                }
            }

            nodes.EndUpdate();
        }
Esempio n. 2
0
        /// <summary>
        /// Updates the items.
        /// </summary>
        /// <param name="newItems">New items.</param>
        void SetNewItems(ObservableList <string> newItems)
        {
            DataSource.OnChange -= UpdateItems;

            if (Sort && SortFunc != null)
            {
                newItems.BeginUpdate();

                var sorted = SortFunc(newItems).ToArray();

                newItems.Clear();
                newItems.AddRange(sorted);

                newItems.EndUpdate();
            }

            SilentDeselect(SelectedIndicies);
            var new_selected_indicies = SelectedItemsCache.Convert <string, int>(newItems.IndexOf);

            new_selected_indicies.RemoveAll(IndexNotFound);

            dataSource = newItems;

            SilentSelect(new_selected_indicies);
            SelectedItemsCache = SelectedIndicies.Convert <int, string>(GetDataItem);

            UpdateView();

            DataSource.OnChange += UpdateItems;
        }
Esempio n. 3
0
        /// <summary>
        /// Refresh this instance.
        /// </summary>
        public virtual void Refresh()
        {
            if (nodes == null)
            {
                NodesList.Clear();

                return;
            }

            NodesList.BeginUpdate();

            var selected_nodes = SelectedNodes;

            NodesList.Clear();

            Nodes2List(nodes, 0, NodesList);

            SilentDeselect(SelectedIndices);
            var indices = Nodes2Indices(selected_nodes);

            SilentSelect(indices);

            NodesList.EndUpdate();

            if (DeselectCollapsedNodes)
            {
                selectedNodes.Clear();
                foreach (var item in SelectedItems)
                {
                    selectedNodes.Add(item.Node);
                }
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Update data list.
        /// </summary>
        public void Update()
        {
            if (inUpdate)
            {
                isChanged = true;
                return;
            }

            if (Data == null)
            {
                return;
            }

            Data.BeginUpdate();

            Data.Clear();

            var groups = GroupsWithItems.Keys.ToList();

            if (GroupComparison != null)
            {
                groups.Sort(GroupComparison);
            }
            groups.ForEach(group => {
                Data.Add(group);
                Data.AddRange(GroupsWithItems[group]);
            });

            Data.EndUpdate();
        }
Esempio n. 5
0
        /// <summary>
        /// Updates the items.
        /// </summary>
        /// <param name="newItems">New items.</param>
        protected virtual void SetNewItems(ObservableList <TItem> newItems)
        {
            //Start();

            DataSource.OnChange -= UpdateItems;

            if (Sort && SortFunc != null)
            {
                newItems.BeginUpdate();

                var sorted = SortFunc(newItems).ToArray();

                newItems.Clear();
                newItems.AddRange(sorted);

                newItems.EndUpdate();
            }

            SilentDeselect(SelectedIndicies);
            var new_selected_indicies = SelectedItemsCache.Convert <TItem, int>(newItems.IndexOf);

            new_selected_indicies.RemoveAll(IndexNotFound);

            dataSource = newItems;

            if (KeepSelection)
            {
                SilentSelect(new_selected_indicies);
            }
            SelectedItemsCache = SelectedItems;

            UpdateView();

            DataSource.OnChange += UpdateItems;
        }
Esempio n. 6
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();
        }
        /// <summary>
        /// Load subnodes data for specified nodes.
        /// </summary>
        /// <param name="nodes">Nodes.</param>
        public virtual void LoadNodes(ObservableList <TreeNode <FileSystemEntry> > nodes)
        {
            nodes.BeginUpdate();

            try
            {
                nodes.ForEach(LoadNode);
            }
            finally
            {
                nodes.EndUpdate();
            }
        }
Esempio n. 8
0
        /// <summary>
        /// Create list.
        /// </summary>
        /// <typeparam name="T">Type of the item.</typeparam>
        /// <param name="count">Items count.</param>
        /// <param name="create">Function to create item.</param>
        /// <returns>List.</returns>
        public static ObservableList <T> CreateList <T>(int count, Func <int, T> create)
        {
            var result = new ObservableList <T>(true, count);

            result.BeginUpdate();

            for (int i = 1; i <= count; i++)
            {
                result.Add(create(i));
            }

            result.EndUpdate();

            return(result);
        }
Esempio n. 9
0
        /// <summary>
        /// Update data list.
        /// </summary>
        public virtual void Update()
        {
            if (inUpdate)
            {
                isChanged = true;
                return;
            }

            if (Data == null)
            {
                return;
            }

            Data.BeginUpdate();

            Data.Clear();

            InsertGroups();

            Data.EndUpdate();
        }