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(); }
/// <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; }
/// <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); } } }
/// <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(); }
/// <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; }
/// <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(); } }
/// <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); }
/// <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(); }