using Caliburn.Micro; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using TrackerLibrary; using TrackerLibrary.Models; namespace TrackerWPFUI.ViewModels { public class CreateTeamViewModel : Conductor, IHandle { private string _teamName = ""; private BindableCollection _availableTeamMembers; private PersonModel _selectedTeamMemberToAdd; private BindableCollection _selectedTeamMembers = new BindableCollection(); private PersonModel _selectedTeamMemberToRemove; private bool _selectedTeamMembersIsVisible = true; private bool _addPersonIsVisible = false; public CreateTeamViewModel() { AvailableTeamMembers = new BindableCollection(GlobalConfig.Connection.GetPerson_All()); EventAggregationProvider.TrackerEventAggregator.Subscribe(this); } public string TeamName { get { return _teamName; } set { _teamName = value; NotifyOfPropertyChange(() => TeamName); NotifyOfPropertyChange(() => CanCreateTeam); } } public bool SelectedTeamMembersIsVisible { get { return _selectedTeamMembersIsVisible; } set { _selectedTeamMembersIsVisible = value; NotifyOfPropertyChange(() => SelectedTeamMembersIsVisible); } } public bool AddPersonIsVisible { get { return _addPersonIsVisible; } set { _addPersonIsVisible = value; NotifyOfPropertyChange(() => AddPersonIsVisible); } } public BindableCollection AvailableTeamMembers { get { return _availableTeamMembers; } set { _availableTeamMembers = value; } } public BindableCollection SelectedTeamMembers { get { return _selectedTeamMembers; } set { _selectedTeamMembers = value; NotifyOfPropertyChange(() => CanCreateTeam); } } public PersonModel SelectedTeamMemberToAdd { get { return _selectedTeamMemberToAdd; } set { _selectedTeamMemberToAdd = value; NotifyOfPropertyChange(() => SelectedTeamMemberToAdd); NotifyOfPropertyChange(() => CanAddMember); } } public bool CanAddMember { get { return SelectedTeamMemberToAdd != null; } } public void AddMember() { SelectedTeamMembers.Add(SelectedTeamMemberToAdd); AvailableTeamMembers.Remove(SelectedTeamMemberToAdd); NotifyOfPropertyChange(() => CanCreateTeam); } public PersonModel SelectedTeamMemberToRemove { get { return _selectedTeamMemberToRemove; } set { _selectedTeamMemberToRemove = value; NotifyOfPropertyChange(() => SelectedTeamMemberToRemove); NotifyOfPropertyChange(() => CanRemoveMember); } } public bool CanRemoveMember { get { return SelectedTeamMemberToRemove != null; } } public void RemoveMember() { AvailableTeamMembers.Add(SelectedTeamMemberToRemove); SelectedTeamMembers.Remove(SelectedTeamMemberToRemove); NotifyOfPropertyChange(() => CanCreateTeam); } public void CreateMember() { ActivateItem(new CreatePersonViewModel()); SelectedTeamMembersIsVisible = false; AddPersonIsVisible = true; } public bool CanCreateTeam { get { if (SelectedTeamMembers != null) { if (TeamName.Length > 0 && SelectedTeamMembers.Count > 0) { return true; } else { return false; } } else { return false; } } } public void CreateTeam() { TeamModel t = new TeamModel(); t.TeamName = TeamName; t.TeamMembers = SelectedTeamMembers.ToList(); GlobalConfig.Connection.CreateTeam(t); //TODO - Pass the team back to the parent and close the form } public void Handle(PersonModel message) { if (!string.IsNullOrWhiteSpace(message.FullName)) { SelectedTeamMembers.Add(message); NotifyOfPropertyChange(() => CanCreateTeam); } SelectedTeamMembersIsVisible = true; AddPersonIsVisible = false; } } }