public GroupSelectorViewModel(IDeviceDataBase deviceDataBase, ILogService logService) { ApproveCommand = new AsyncCommand(async() => { m_groupingStateMachine.GoToGroupsOverViewState(GroupedGroups.Where(g => g.Any()).ToList()); try { foreach (var groupedGroup in GroupedGroups) { foreach (var individual in groupedGroup) { var otherIndividualsInGroup = groupedGroup.Where(individualInGroup => individualInGroup.GetIndividual().Id != individual.GetIndividual().Id); foreach (var otherIndividual in otherIndividualsInGroup) { await m_deviceDataBase.Save(new IndividualGroupings() { IndividualId = individual.GetIndividual().Id, OtherIndividualId = otherIndividual.GetIndividual().Id }); } } } } catch (Exception exception) { m_logService.Log(exception); } }); GroupCommand = new Command <int>(numberOfIndividualsInGroup => { Group(numberOfIndividualsInGroup); }); ChangeSelectionCommand = new Command(() => { m_groupingStateMachine.GoToIndividualSelectorState(); }); HighlightCommand = new AsyncCommand <MoveableIndividual>(async individual => { try { CancelMovementCommand.Execute(null); m_highLightedIndividual = individual; m_highLightedIndividual.IsHighligted = true; var groupsToHighlight = GroupedGroups.Where(groupedIndividuals => !groupedIndividuals.Contains(individual)); groupsToHighlight.ForEach(g => g.IsHighlighted = true); await DisplayNumberOfTimesWithOthers(individual); } catch (System.Exception exception) { m_logService.Log(exception); } }); CancelMovementCommand = new Command(() => { GroupedGroups.ForEach(g => g.IsHighlighted = false); if (m_highLightedIndividual != null) { m_highLightedIndividual.IsHighligted = false; } m_highLightedIndividual = null; GroupedGroups.ForEach(g => g.ForEach(i => i.NumberOfTimesGroupedWith = 0)); }); MoveIndividualCommand = new Command <GroupedIndividuals>(ig => { var group = GroupedGroups.First(groupedIndividuals => groupedIndividuals.Contains(m_highLightedIndividual)); group.Remove(m_highLightedIndividual); ig.Add(m_highLightedIndividual); CancelMovementCommand.Execute(null); }); m_deviceDataBase = deviceDataBase; m_logService = logService; }