private void EnsureAsyncUpdate(SelectedElementsResourceObserver.UpdateState updateState) { if (this.updateState >= updateState) { return; } if (this.updateState == SelectedElementsResourceObserver.UpdateState.None) { UIThreadDispatcher.Instance.BeginInvoke(DispatcherPriority.Send, new Action(this.UpdateAsync)); } this.updateState = updateState; }
private void UpdateAsync() { SelectedElementsResourceObserver.UpdateState updateState = this.updateState; this.updateState = SelectedElementsResourceObserver.UpdateState.None; List <DocumentNode> list1 = this.oldNodesAsync; List <DocumentNode> list2 = this.newNodesAsync; this.oldNodesAsync = new List <DocumentNode>(); this.newNodesAsync = new List <DocumentNode>(); if (updateState == SelectedElementsResourceObserver.UpdateState.Catastrophic) { this.Update(this.ViewModel, SceneViewModel.ViewStateBits.EntireScene); } foreach (DocumentNode documentNode in list2) { foreach (ResourceContainer resourceContainer in this.ResourceManager.ActiveSceneViewModel == null || documentNode.DocumentRoot != this.ResourceManager.ActiveSceneViewModel.DocumentRoot ? (IEnumerable)this.ResourceManager.DocumentResourceContainers : (IEnumerable)this.ResourceManager.LocalResourceContainers) { if (resourceContainer.DocumentNode != null && ResourceNodeHelper.GetResourcesCollection(resourceContainer.DocumentNode).Resources == documentNode.Parent) { foreach (ResourceItem resourceItem in (Collection <ResourceItem>)resourceContainer.ResourceItems) { if (resourceItem.DocumentNode == documentNode) { this.AddRefItem(resourceItem); break; } } } } } foreach (DocumentNode documentNode in list1) { foreach (ResourceItem resourceItem in (Collection <ResourceItem>) this.ResourceItems) { if (resourceItem.DocumentNode == documentNode) { this.RemoveItem(resourceItem); break; } } } }