using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Tango.FSE.UsersAndRoles.Models { public class RolesCollection : Collection { private bool _invalidating; protected override void InsertItem(int index, RoleModel item) { base.InsertItem(index, item); item.PropertyChanged += Item_PropertyChanged; Invalidate(); } private void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == nameof(RoleModel.IsSelected)) { Invalidate(); } } private void Invalidate() { if (!_invalidating) { _invalidating = true; foreach (var role in Items) { foreach (var dependencyRole in role.Dependencies) { var dependencyRoleModel = Items.SingleOrDefault(x => x.Role.Code == dependencyRole.ToInt32()); if (dependencyRoleModel != null) { if (role.IsSelected) { dependencyRoleModel.IsSelected = true; dependencyRoleModel.IsEnabled = false; } else { dependencyRoleModel.IsEnabled = !Items.Any(x => x.IsSelected && x.Dependencies.Contains(dependencyRole)); } } } } _invalidating = false; } } } }