internal override void RequestTreeItems(TreeGridRequestTreeItemsEventArgs e)
        {
            bool canPopualate = (e.ParentNode != null && e.ParentNode.ChildNodes.Any() && e.ResetChildAndRepopulate) || (e.ParentNode != null && !e.ParentNode.ChildNodes.Any()) || e.ParentNode == null;

            if (!canPopualate)
            {
                if (e.ParentNode != null)
                {
                    if (SortDescriptions.Any())
                    {
                        e.ParentNode.ChildNodes.Sort(SortDescriptions, SortComparers);
                    }
                }
                return;
            }

            if (e.ParentItem == null)
            {
                e.ChildItems = GetChildSourceFromParentID(SelfRelationRootValue, e.ParentItem, true);
            }
            else
            {
                object parentValue = propertyAccessProvider.GetValue(e.ParentItem, parentPropertyName);
                e.ChildItems = GetChildSourceFromParentID(parentValue, e.ParentItem, e.CanAddChildNode);
            }

            if (e.CanAddChildNode)
            {
                PopulateTreeNodes(e);
                if (this.SortDescriptions.Any())
                {
                    SortNodes(e.ParentNode);
                }
            }
        }
Пример #2
0
        internal override void RequestTreeItems(TreeGridRequestTreeItemsEventArgs e)
        {
            bool canPopualate = (e.ParentNode != null && e.ParentNode.ChildNodes.Any() && e.ResetChildAndRepopulate) || (e.ParentNode != null && !e.ParentNode.ChildNodes.Any()) || e.ParentNode == null;

            if (!canPopualate)
            {
                if (e.ParentNode != null)
                {
                    if (SortDescriptions.Any())
                    {
                        e.ParentNode.ChildNodes.Sort(SortDescriptions, SortComparers);
                    }
                }
                return;
            }

            if (e.ParentItem == null)
            {
                e.ChildItems = TreeGrid.ItemsSource as IEnumerable;
            }

            if (e.CanAddChildNode)
            {
                PopulateTreeNodes(e);
                if (this.SortDescriptions.Any())
                {
                    SortNodes(e.ParentNode);
                }
            }
        }
        internal override void RequestTreeItems(TreeGridRequestTreeItemsEventArgs e)
        {
            bool canPopualte = (e.ParentNode != null && e.ParentNode.ChildNodes.Any() && e.ResetChildAndRepopulate) || (e.ParentNode != null && !e.ParentNode.ChildNodes.Any()) || e.ParentNode == null;

            if (!canPopualte)
            {
                if (e.ParentNode != null && SortDescriptions.Any())
                {
                    e.ParentNode.ChildNodes.Sort(SortDescriptions, SortComparers);
                }
                return;
            }

            this.TreeGrid.RaiseRequestTreeItemsEvent(e);
            if (e.CanAddChildNode)
            {
                PopulateTreeNodes(e);
                if (e.ChildItems != null)
                {
                    WireNotifyPropertyChange(e.ChildItems);
                }
                if (this.SortDescriptions.Any())
                {
                    SortNodes(e.ParentNode);
                }
            }
        }
        private void AddNodesUnderRootNodes(object item)
        {
            TreeNode parentNode = null;

            if (SortDescriptions.Count == 1 && SortDescriptions.Any(desc => desc.ColumnName == parentPropertyName))
            {
                object newAddItem = null;
                object childValue = propertyAccessProvider.GetValue(item, childPropertyName);
                var    itemType   = this.SourceCollection.GetItemType(true);
                if (itemType != null)
                {
                    if (itemType.IsInterface() || itemType.IsAbstract())
                    {
                        newAddItem = null;
                    }
                    else
                    {
                        newAddItem = itemType.CreateNew();
                    }
                    propertyAccessProvider.SetValue(newAddItem, parentPropertyName, childValue);
                }
                var tempNode = new TreeNode()
                {
                    Item = newAddItem
                };
                parentNode = FindParentNode(this.Nodes.RootNodes, tempNode);
            }
            else
            {
                object childValue = propertyAccessProvider.GetValue(item, childPropertyName);
                parentNode = FindParentNode(this.Nodes.RootNodes, childValue);
            }
            if (parentNode == null)
            {
                return;
            }

            if (parentNode.IsExpanded || parentNode.ChildNodes.Any())
            {
                AddNode(parentNode, item, parentNode.ChildNodes.Count);
            }
            else
            {
                if (!parentNode.HasVisibleChildNodes)
                {
                    // If FilterLevel is Root, no need to update HasVisibleChildNodes based on filtering.
                    if (FilterLevel != FilterLevel.Root)
                    {
                        UpdateHasVisibleChildNodesBasedOnChildItem(parentNode, item);
                    }
                }
            }
            parentNode.HasChildNodes = true;
            ChangeParentNodeExpander(parentNode);
        }
        private void RemoveNodesUnderRootNodes(object item)
        {
            TreeNode parentNode = null;

            // Remove nodes under Root nodes
            if (SortDescriptions.Count == 1 && SortDescriptions.Any(desc => desc.ColumnName == parentPropertyName))
            {
                object CurrentAddItem = null;
                object childValue     = propertyAccessProvider.GetValue(item, childPropertyName);
                var    itemType       = this.SourceCollection.GetItemType(true);
                if (itemType != null)
                {
                    if (itemType.IsInterface() || itemType.IsAbstract())
                    {
                        CurrentAddItem = null;
                    }
                    else
                    {
                        CurrentAddItem = itemType.CreateNew();
                    }
                    propertyAccessProvider.SetValue(CurrentAddItem, parentPropertyName, childValue);
                }
                var tempNode = new TreeNode()
                {
                    Item = CurrentAddItem
                };
                parentNode = FindParentNode(this.Nodes.RootNodes, tempNode);
            }
            else
            {
                object childValue = propertyAccessProvider.GetValue(item, childPropertyName);
                parentNode = FindParentNode(this.Nodes.RootNodes, childValue);
            }
            if (parentNode == null)
            {
                return;
            }

            if (parentNode.IsExpanded || parentNode.ChildNodes.Any())
            {
                RemoveNode(parentNode, item);
            }
            else
            {
                if (parentNode.HasChildNodes)
                {
                    parentNode.isVisibleChildNodeAvailabilityChecked = false;
                    ChangeParentNodeExpander(parentNode);
                }
            }
        }
Пример #6
0
        internal override void RequestTreeItems(TreeGridRequestTreeItemsEventArgs e)
        {
            bool canPopualate = (e.ParentNode != null && e.ParentNode.ChildNodes.Any() && e.ResetChildAndRepopulate) || (e.ParentNode != null && !e.ParentNode.ChildNodes.Any()) || e.ParentNode == null;

            if (!canPopualate)
            {
                if (e.ParentNode != null)
                {
                    if (SortDescriptions.Any())
                    {
                        e.ParentNode.ChildNodes.Sort(SortDescriptions, SortComparers);
                    }
                }
                return;
            }

            if (e.ParentItem == null)
            {
                e.ChildItems = TreeGrid.ItemsSource as IEnumerable;
            }
            else
            {
                if (!e.ParentNode.HasChildItems || e.ResetChildAndRepopulate)
                {
                    e.ChildItems = GetChildSource(e.ParentItem, childPropertyName);
                    if (e.ChildItems is INotifyCollectionChanged)
                    {
                        e.ParentNode.HasChildItems = true;
                    }
                }
                else
                {
                    e.ChildItems = (IEnumerable)e.ParentNode.ChildItems;
                }
            }

            if (e.ChildItems != null && e.ParentNode != null)
            {
                WireNotifyPropertyChange(e.ChildItems, e.ParentNode);
            }
            if (e.CanAddChildNode)
            {
                PopulateTreeNodes(e);
                if (this.SortDescriptions.Any())
                {
                    SortNodes(e.ParentNode);
                }
            }
        }
Пример #7
0
 /// <summary>
 ///  Determines whether a view refresh is needed.
 /// </summary>
 /// <param name = "propertyName">The name of the changed property.</param>
 /// <returns>
 ///  <c>True</c> if a view refresh needed; otherwise, <c>false</c>.
 /// </returns>
 private bool IsViewRefreshNeeded(string propertyName)
 {
     return(SortDescriptions.Any(sort => string.Equals(sort.PropertyName, propertyName)) || GroupDescriptions.OfType <PropertyGroupDescription>().Where(g => string.Equals(g.PropertyName, propertyName)).Any());
 }