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