コード例 #1
0
        /// <summary>
        /// 在结点被收缩起来时,应该它的子结点的所有数据在_objectItems中对应的项都移除。
        /// </summary>
        /// <param name="treeNode"></param>
        private void OnNodeCollapsed(TreeGridRow treeNode)
        {
            //处理 LazyLoading

            //结点被折叠后事件。
            //如果懒加载开启后,则在折叠时清空所有子结点。

            //不处理根结点。
            if (treeNode != this.RootNode)
            {
                //更新布局
                var itemKey = GetId(treeNode.DataContext);
                _renderExpansion.Remove(itemKey);

                if (this.IsLazyLoading && this.ClearCollapsedNodes && treeNode.Items.Count > 0)
                {
                    //deregisters listeners for all ancestors
                    if (this.ObserveChildItems)
                    {
                        _monitor.RemoveNodes(treeNode.Items);
                    }

                    treeNode.ItemsSource = null;
                    TreeGridHelper.CreateDummyItem(treeNode);

                    //TODO do we have collapsed event if all childs are being filtered?
                    //if yes, we need to set the dummy nodes visibility depending
                    //on the filtered childs (visible if at least 1 visible child)
                }
            }
        }
コード例 #2
0
ファイル: ItemMonitor.cs プロジェクト: yungtau/oea
        /// <summary>
        /// Updates the tree with newly added items.
        /// </summary>
        /// <param name="observed">The observed collection.</param>
        /// <param name="e">Collection event args.</param>
        public void HandleNewChildItems(ICollection observed, NotifyCollectionChangedEventArgs e)
        {
            IList childs = e.NewItems;

            if (childs.Count == 0)
            {
                return;
            }

            //get the node of the parent item that contains the evented childs
            var parentNode = GetParentNode(childs[0], observed);

            if (parentNode == null)
            {
                return;
            }

            //if the node is expanded or does not load lazily, or
            //already contains valid items, create nodes
            if (parentNode.IsExpanded || !tree.IsLazyLoading || !TreeGridHelper.ContainsDummyNode(parentNode))
            {
                var rawLayout = tree._renderExpansion;
                try
                {
                    tree._renderExpansion = null;

                    parentNode.ItemsSource = childs;
                }
                finally
                {
                    tree._renderExpansion = rawLayout;
                }

                //refresh the node in order to apply sorting (or any other
                //features that will be incorporated)
                parentNode.Items.Refresh();
            }
            else if (parentNode.Items.Count == 0)
            {
                //if the tree is in lazy loading mode and the item did
                //not contain any childs before, we have to add a dummy
                //node to render a expander
                parentNode.Items.Add(TreeGridHelper.CreateDummyItem());
            }
        }