Esempio n. 1
0
        /// <inheritdoc cref="ISettingValueSource.WriteSettingValue{T}"/>
        public void WriteSettingValue <T>(string groupName, string settingName, T value)
        {
            var settingsGroup = _SettingsGroups.GetOrAdd(groupName, CreateSettingsGroup);

            settingsGroup[settingName] = value;

            SettingValueChanged?.Invoke(groupName, settingName);
        }
        private void SettingsChanged(IReadOnlyDictionary <string, string> settings, IReadOnlyDictionary <string, string> previousSettings)
        {
            if (previousSettings == null)
            {
                return;
            }

            var changedSettingNames = new HashSet <string>();

            foreach (var setting in settings)
            {
                if (previousSettings.TryGetValue(setting.Key, out var previousValue))
                {
                    if (previousValue != setting.Value)
                    {
                        // Had the value before, and it changed.
                        changedSettingNames.Add(setting.Key);
                    }
                }
                else
                {
                    // Didn't have setting before, but we do now.
                    changedSettingNames.Add(setting.Key);
                }
            }

            foreach (var setting in previousSettings)
            {
                if (settings.TryGetValue(setting.Key, out var value))
                {
                    if (value != setting.Value)
                    {
                        // Had the value before, and it changed. Should be redundant with the above loop.
                        changedSettingNames.Add(setting.Key);
                    }
                }
                else
                {
                    // Had the value before, but don't anymore.
                    changedSettingNames.Add(setting.Key);
                }
            }

            foreach (var settingName in changedSettingNames)
            {
                SettingValueChanged?.Invoke(_ApplicationContext.Name, settingName);
            }
        }
Esempio n. 3
0
        private void HandleObservableCollectionChanged(object value, NotifyCollectionChangedEventArgs e)
        {
            string settingName = SettingsValues.FirstOrDefault(x => x.Value == value).Key;
            var    settingValueChangedInvocationList = SettingValueChanged.GetInvocationList();

            foreach (var item in settingValueChangedInvocationList)
            {
                Task.Run(() => (item as Action <string, object>).Invoke(settingName, value));
            }

            var propertyChangedInvocationList = PropertyChanged.GetInvocationList();

            foreach (var item in propertyChangedInvocationList)
            {
                Task.Run(() => (item as PropertyChangedEventHandler).Invoke(this, new PropertyChangedEventArgs(settingName)));
            }
        }
Esempio n. 4
0
        public void Set(string settingName, object value)
        {
            if (SettingsValues.ContainsKey(settingName))
            {
                var oldValue = SettingsValues[settingName];
                if (!oldValue.Equals(value))
                {
                    SettingsValues[settingName] = value;
                    SettingValueChanged?.Invoke(settingName, value);
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(settingName));
                }
            }
            else
            {
                SettingsValues[settingName] = value;
            }

            if (value is INotifyCollectionChanged)
            {
                var collection = (INotifyCollectionChanged)value;
                collection.CollectionChanged -= HandleObservableCollectionChanged;
                collection.CollectionChanged += HandleObservableCollectionChanged;
            }
        }
Esempio n. 5
0
        public void Set(string settingName, object value)
        {
            if (SettingsValues.ContainsKey(settingName))
            {
                var oldValue = SettingsValues[settingName];
                if (!oldValue.Equals(value))
                {
                    SettingsValues[settingName] = value;
                    SettingValueChanged?.Invoke(settingName, value);
                    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(settingName));
                }
            }
            else
            {
                throw new Exception($"Setting {settingName} is not defined. Use `{nameof(Define)}` method to define settings.");
            }

            if (value is INotifyCollectionChanged)
            {
                var collection = (INotifyCollectionChanged)value;
                collection.CollectionChanged -= HandleObservableCollectionChanged;
                collection.CollectionChanged += HandleObservableCollectionChanged;
            }
        }