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