diff options
Diffstat (limited to 'Xamarin.Forms.Core/ResourceDictionary.cs')
-rw-r--r-- | Xamarin.Forms.Core/ResourceDictionary.cs | 91 |
1 files changed, 6 insertions, 85 deletions
diff --git a/Xamarin.Forms.Core/ResourceDictionary.cs b/Xamarin.Forms.Core/ResourceDictionary.cs index b3cb3214..2fc11ffc 100644 --- a/Xamarin.Forms.Core/ResourceDictionary.cs +++ b/Xamarin.Forms.Core/ResourceDictionary.cs @@ -5,8 +5,6 @@ using System.Runtime.CompilerServices; using System.Linq; using System.Reflection; using Xamarin.Forms.Internals; -using System.Collections.ObjectModel; -using System.Collections.Specialized; namespace Xamarin.Forms { @@ -14,13 +12,12 @@ namespace Xamarin.Forms { static ConditionalWeakTable<Type, ResourceDictionary> s_instances = new ConditionalWeakTable<Type, ResourceDictionary>(); readonly Dictionary<string, object> _innerDictionary = new Dictionary<string, object>(); - ResourceDictionary _mergedInstance; - Type _mergedWith; + Type _mergedWith; [TypeConverter (typeof(TypeTypeConverter))] public Type MergedWith { get { return _mergedWith; } - set { + set { if (_mergedWith == value) return; @@ -31,69 +28,12 @@ namespace Xamarin.Forms if (_mergedWith == null) return; - _mergedInstance = s_instances.GetValue(_mergedWith, (key) => (ResourceDictionary)Activator.CreateInstance(key)); - OnValuesChanged(_mergedInstance.ToArray()); - } - } - - ICollection<ResourceDictionary> _mergedDictionaries; - public ICollection<ResourceDictionary> MergedDictionaries { - get { - if (_mergedDictionaries == null) { - var col = new ObservableCollection<ResourceDictionary>(); - col.CollectionChanged += MergedDictionaries_CollectionChanged; - _mergedDictionaries = col; - } - return _mergedDictionaries; - } - } - - IList<ResourceDictionary> _collectionTrack; - - void MergedDictionaries_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) - { - // Move() isn't exposed by ICollection - if (e.Action == NotifyCollectionChangedAction.Move) - return; - - _collectionTrack = _collectionTrack ?? new List<ResourceDictionary>(); - // Collection has been cleared - if (e.Action == NotifyCollectionChangedAction.Reset) { - foreach (var dictionary in _collectionTrack) - dictionary.ValuesChanged -= Item_ValuesChanged; - - _collectionTrack.Clear(); - return; - } - - // New Items - if (e.NewItems != null) - { - foreach (var item in e.NewItems) - { - var rd = (ResourceDictionary)item; - _collectionTrack.Add(rd); - rd.ValuesChanged += Item_ValuesChanged; - OnValuesChanged(rd.ToArray()); - } - } - - // Old Items - if (e.OldItems != null) - { - foreach (var item in e.OldItems) - { - var rd = (ResourceDictionary)item; - rd.ValuesChanged -= Item_ValuesChanged; - _collectionTrack.Remove(rd); - } + _mergedInstance = s_instances.GetValue(_mergedWith,(key) => (ResourceDictionary)Activator.CreateInstance(key)); + OnValuesChanged (_mergedInstance.ToArray()); } } - void Item_ValuesChanged(object sender, ResourcesChangedEventArgs e) - { - OnValuesChanged(e.Values.ToArray()); - } + ResourceDictionary _mergedInstance; void ICollection<KeyValuePair<string, object>>.Add(KeyValuePair<string, object> item) { @@ -154,10 +94,6 @@ namespace Xamarin.Forms return _innerDictionary[index]; if (_mergedInstance != null && _mergedInstance.ContainsKey(index)) return _mergedInstance[index]; - if (MergedDictionaries != null) - foreach (var dict in MergedDictionaries.Reverse()) - if (dict.ContainsKey(index)) - return dict[index]; throw new KeyNotFoundException($"The resource '{index}' is not present in the dictionary."); } set @@ -194,9 +130,6 @@ namespace Xamarin.Forms internal IEnumerable<KeyValuePair<string, object>> MergedResources { get { - if (MergedDictionaries != null) - foreach (var r in MergedDictionaries.Reverse().SelectMany(x => x.MergedResources)) - yield return r; if (_mergedInstance != null) foreach (var r in _mergedInstance.MergedResources) yield return r; @@ -207,19 +140,7 @@ namespace Xamarin.Forms public bool TryGetValue(string key, out object value) { - return _innerDictionary.TryGetValue(key, out value) - || (_mergedInstance != null && _mergedInstance.TryGetValue(key, out value)) - || (MergedDictionaries != null && TryGetMergedDictionaryValue(key, out value)); - } - - bool TryGetMergedDictionaryValue(string key, out object value) - { - foreach (var dictionary in MergedDictionaries.Reverse()) - if (dictionary.TryGetValue(key, out value)) - return true; - - value = null; - return false; + return _innerDictionary.TryGetValue(key, out value) || (_mergedInstance != null && _mergedInstance.TryGetValue(key, out value)); } event EventHandler<ResourcesChangedEventArgs> IResourceDictionary.ValuesChanged |