24 private ObservableCollection<Person>
_people;
36 private ICollectionView _peopleCollectionView;
42 get => _peopleCollectionView;
43 private set => SetProperty(ref _peopleCollectionView, value);
54 private string _filterText =
"";
63 if (SetProperty(ref _filterText, value))
81 bool filterResult = person.
Name.ToLower().Contains(
FilterText?.ToLower()) ||
93 private ICommand _clearFilterCommand;
97 public ICommand
ClearFilterCommand => _clearFilterCommand ?? (_clearFilterCommand =
new RelayCommand(() =>
106 private IDialogCoordinator _dialogCoordinator;
118 _personService = personService;
119 _competitionService = competitionService;
120 _dialogCoordinator = dialogCoordinator;
126 private ICommand _addPersonCommand;
130 public ICommand
AddPersonCommand => _addPersonCommand ?? (_addPersonCommand =
new RelayCommand(() =>
133 person.PropertyChanged += Person_PropertyChanged;
134 _personService.AddPerson(person);
135 _competitionService.UpdateAllCompetitionsForPerson(person);
136 SelectedPerson = person;
141 private ICommand _removePersonCommand;
145 public ICommand
RemovePersonCommand => _removePersonCommand ?? (_removePersonCommand =
new RelayCommand<Person>(async (person) =>
148 if (result == MessageDialogResult.Affirmative)
150 person.PropertyChanged -= Person_PropertyChanged;
151 _personService.RemovePerson(person);
157 private ICommand _personActiveInactiveCommand;
161 public ICommand
PersonActiveInactiveCommand => _personActiveInactiveCommand ?? (_personActiveInactiveCommand =
new RelayCommand<Person>((person) =>
163 person.IsActive = !person.IsActive;
168 #region Friend Groups Handling
174 private ObservableCollection<FriendGroupViewModel>
_friendGroups =
new ObservableCollection<FriendGroupViewModel>();
183 if (FriendGroups?.Count > 0) { newGroupId = FriendGroups?.Max(g => g.GroupId) + 1 ?? 0; }
186 GroupId = newGroupId,
187 AvailableFriends = People,
188 Friends =
new ObservableCollection<Person>()
190 newGroup.Friends.CollectionChanged += (s, e) => Friends_CollectionChanged(s, e, newGroup);
191 FriendGroups.Add(newGroup);
201 foreach (
Person person
in group.Friends)
208 FriendGroups.Remove(group);
209 _personService.UpdateAllFriendReferencesFromFriendGroupIDs();
217 _pauseFriendsCollectionChangedEvent =
true;
218 FriendGroups.Clear();
219 _pauseFriendsCollectionChangedEvent =
false;
222 List<int> allGroupIds = People.Select(p => p.FriendGroupIDs ?? Enumerable.Empty<
int>()).Aggregate(
new List<int>(), (acc, innerList) =>
224 acc.AddRange(innerList);
226 }).Distinct().OrderBy(
id =>
id).ToList();
228 foreach (
int groupId
in allGroupIds)
234 AvailableFriends = People,
236 Friends =
new ObservableCollection<Person>(People.Where(p => p.FriendGroupIDs.Contains(groupId)))
238 group.Friends.CollectionChanged += (s, e) => Friends_CollectionChanged(s, e, group);
239 FriendGroups.Add(group);
243 private bool _pauseFriendsCollectionChangedEvent =
false;
244 private void Friends_CollectionChanged(
object sender,
System.Collections.Specialized.NotifyCollectionChangedEventArgs e,
FriendGroupViewModel groupViewModel)
246 if (_pauseFriendsCollectionChangedEvent) {
return; }
248 int groupId = groupViewModel.GroupId;
251 case System.Collections.Specialized.NotifyCollectionChangedAction.Add:
253 foreach (
Person newPerson
in e.NewItems)
262 case System.Collections.Specialized.NotifyCollectionChangedAction.Remove:
264 foreach (
Person oldPerson
in e.OldItems)
275 _personService.UpdateAllFriendReferencesFromFriendGroupIDs();
286 People = _personService?.GetPersons();
289 SelectedPerson = People?.FirstOrDefault();
291 foreach(
Person person
in People)
294 person.PropertyChanged -= Person_PropertyChanged;
295 person.PropertyChanged += Person_PropertyChanged;
308 foreach (
Person person
in People)
310 person.PropertyChanged -= Person_PropertyChanged;
316 #region Property changed event handler
318 private void Person_PropertyChanged(
object sender, PropertyChangedEventArgs e)
320 switch (e.PropertyName)