Пример #1
0
        internal override void UpdateChildren(ChangeNotificationTracker tracker, EventArgs e)
        {
            if (this.PerfEventProvider != null)
            {
                this.PerfEventProvider.DesignerTreeViewUpdateStart();
            }

            // Update VisualValue when promotedProperty's got changed.
            if (this.promotedProperty != null && this.promotedProperty == tracker.ParentProperty)
            {
                this.VisualValue = this.promotedProperty.Value;
            }

            if (this.Children.Count == 1 && this.Children[0] == DummyNode)
            {
                // If the node never expanded before, LoadChildren instead of UpdateChildren.
                // Otherwise, when expanding node, the LoadChildren method won't invoke
                // Then other tracking properties cannot be setup correctly.
                this.InternalChildren.Remove(DummyNode);
                this.LoadChildren();
            }
            else
            {
                // If requireUpdateChildren = false, the related TreeViewItemModelPropertyViewModel take care of updating child nodes.
                bool requireUpdateChildren = true;
                if (e is PropertyChangedEventArgs && this.IsModelPropertyNodeExisted(tracker.ParentProperty))
                {
                    ModelProperty modelProperty = tracker.ParentProperty;
                    if (modelProperty.Value != null)
                    {
                        string changedPropertyName       = ((PropertyChangedEventArgs)e).PropertyName;
                        bool   isPromotedPropertyChanged = TreeViewItemViewModel.IsPromotedProperty(modelProperty.Value, changedPropertyName);
                        if (isPromotedPropertyChanged)
                        {
                            if (modelProperty.Value.Properties[changedPropertyName].Value != null)
                            {
                                requireUpdateChildren = false;
                            }
                        }
                        else
                        {
                            requireUpdateChildren = false;
                        }
                    }
                }

                if (requireUpdateChildren)
                {
                    base.UpdateChildren(tracker, e);
                    tracker.CleanUp();
                    TreeViewItemViewModel.AddModelProperty(this, this.Value, tracker.ParentProperty, tracker.ParentProperty);
                }
            }

            if (this.PerfEventProvider != null)
            {
                this.PerfEventProvider.DesignerTreeViewUpdateEnd();
            }
        }
        internal override void UpdateChildren(ChangeNotificationTracker tracker, EventArgs e)
        {
            if (this.PerfEventProvider != null)
            {
                this.PerfEventProvider.DesignerTreeViewUpdateStart();
            }

            base.UpdateChildren(tracker, e);
            tracker.CleanUp();
            if (this.Value.Value != null)
            {
                this.AddChild(TreeViewItemViewModel.CreateViewModel(this, this.Value.Value), tracker.ParentProperty);
            }

            if (this.PerfEventProvider != null)
            {
                this.PerfEventProvider.DesignerTreeViewUpdateEnd();
            }
        }
        internal override void UpdateChildren(ChangeNotificationTracker tracker, EventArgs e)
        {
            if (this.PerfEventProvider != null)
            {
                this.PerfEventProvider.DesignerTreeViewUpdateStart();
            }

            //
            base.UpdateChildren(tracker, e);
            tracker.CleanUp();
            this.InternalChildren.Clear();

            this.LoadChildren();

            if (this.PerfEventProvider != null)
            {
                this.PerfEventProvider.DesignerTreeViewUpdateEnd();
            }
        }