/// <summary> /// Applies the <see cref="IConfigurationItem" />to list of <see cref="NotificationState" />s. /// </summary> /// <param name="notificationStates">The notification states.</param> /// <param name="configItem">The configuration item.</param> /// <param name="configItemAttribute">The configuration item attribute.</param> /// <param name="expander">The expander control.</param> private void ApplyConfigurationItemToNotificationStateList(IList <NotificationState> notificationStates, IConfigurationItem configItem, ConfigurationItemAttribute configItemAttribute, Expander expander) { var configItemValue = configItem.GetOrCreateConnectorNotificationConfiguration(); var observationStates = Enum.GetValues(typeof(ObservationState)).Cast <ObservationState>().ToList(); if (configItemAttribute is NotificationConfigurationItemAttribute notificationConfigurationItemAttribute) { this.RemoveNotSupportedObservationStates(observationStates, notificationConfigurationItemAttribute); } var useGlobalNotificationState = notificationStates.FirstOrDefault(n => n.IsUseGlobalSettings); if (useGlobalNotificationState == null) { useGlobalNotificationState = new NotificationState(notificationStates); useGlobalNotificationState.IsActive = configItemValue.UseGlobalNotificationSettings; useGlobalNotificationState.Caption = "Use global configuration"; // TODO load from resources useGlobalNotificationState.PropertyChanged += (s, e) => this.NotificationStateChanged(useGlobalNotificationState, configItem, e.PropertyName); useGlobalNotificationState.IsUseGlobalSettings = true; notificationStates.Add(useGlobalNotificationState); } else { var newActiveState = configItemValue.UseGlobalNotificationSettings; if (useGlobalNotificationState.IsActive != newActiveState) { useGlobalNotificationState.IsActive = configItemValue.UseGlobalNotificationSettings; } } foreach (var observationState in observationStates) { var notificationState = notificationStates.FirstOrDefault(n => n.ObservationState == observationState); if (notificationState == null) { notificationState = new NotificationState(notificationStates); notificationState.IsActive = configItemValue.AsObservationStateFlag(observationState); notificationState.ObservationState = observationState; notificationState.Caption = observationState.ToString(); // TODO load from resources notificationState.PropertyChanged += (s, e) => this.NotificationStateChanged(notificationState, configItem, e.PropertyName); notificationState.PropertyChanged += (s, e) => this.UpdateExpanderHeader(expander, notificationStates); notificationStates.Add(notificationState); } else { var newActiveState = configItemValue.UseGlobalNotificationSettings; if (notificationState.IsActive != newActiveState) { notificationState.IsActive = configItemValue.AsObservationStateFlag(observationState); } } } }