protected override bool UpdateAssets() { if (!this.NeedsUpdate) { return(false); } this.NeedsUpdate = false; ObservableCollectionWorkaround <Asset> collectionWorkaround = this.Assets.Clone(); List <Asset> list = new List <Asset>(collectionWorkaround.Count); this.Assets.Clear(); foreach (AssetProvider assetProvider in this.assetProviders) { foreach (Asset asset in (Collection <Asset>)assetProvider.Assets) { list.Add(asset); } } collectionWorkaround.Sort(Asset.DefaultComparer); list.Sort(Asset.DefaultComparer); int index1 = 0; int index2 = 0; while (index1 < collectionWorkaround.Count && index2 < list.Count) { int num = collectionWorkaround[index1].CompareTo(list[index2]); if (num == 0) { this.Assets.Add(list[index2]); ++index1; ++index2; } else if (num < 0) { collectionWorkaround[index1++].IsValid = false; } else { this.Assets.Add(list[index2++]); } } while (index1 < collectionWorkaround.Count) { collectionWorkaround[index1++].IsValid = false; } while (index2 < list.Count) { this.Assets.Add(list[index2++]); } foreach (Asset asset in (Collection <Asset>) this.Assets) { asset.IsValid = true; } this.NotifyAssetsChanged(); return(true); }
protected virtual ObservableCollectionWorkaround <LocalResourceModel> ProvideLocalResources(List <ResourceContainer> activeContainers) { ObservableCollectionWorkaround <LocalResourceModel> collectionWorkaround = new ObservableCollectionWorkaround <LocalResourceModel>(); foreach (DocumentCompositeNode entryNode in this.DesignerContext.ResourceManager.GetResourcesInElementsScope((IList <ResourceContainer>)activeContainers, PlatformTypes.Object, ResourceResolutionFlags.IncludeApplicationResources | ResourceResolutionFlags.UniqueKeysOnly)) { DocumentNode resourceEntryKey = ResourceNodeHelper.GetResourceEntryKey(entryNode); DocumentNode node = entryNode.Properties[DictionaryEntryNode.ValueProperty]; if (resourceEntryKey != null) { DelayedEvaluationLocalResourceModel localResourceModel = new DelayedEvaluationLocalResourceModel(this.DocumentContext, this.DesignerContext, resourceEntryKey, node.TargetType, node); collectionWorkaround.Add((LocalResourceModel)localResourceModel); } } collectionWorkaround.Sort((Comparison <LocalResourceModel>)((left, right) => string.Compare(left.ResourceName, right.ResourceName, StringComparison.CurrentCulture))); return(collectionWorkaround); }