private void SelectPrevious() { if (_races.Any()) { RaceListItemViewModel selected = _races.FirstOrDefault(x => x.IsSelected); foreach (RaceListItemViewModel race in _races) { race.IsSelected = false; } if (selected == null) { _races[_races.Count - 1].IsSelected = true; _selectedRace = new RaceViewModel(_races[_races.Count - 1].RaceModel); } else { int index = Math.Max(_races.IndexOf(selected) - 1, 0); _races[index].IsSelected = true; _selectedRace = new RaceViewModel(_races[index].RaceModel); } OnPropertyChanged(nameof(SelectedRace)); } }
private void ViewModel_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { if (e.PropertyName == nameof(RacesViewModel.SelectedRace)) { RaceListItemViewModel selected = _viewModel.Races.FirstOrDefault(x => x.IsSelected); if (selected != null) { if (_tree.ItemContainerGenerator.ContainerFromItem(selected) is TreeViewItem item) { item.BringIntoView(); } } } }
private void Delete() { if (_selectedRace != null) { bool canDelete = true; foreach (CharacterModel character in _compendium.Characters) { if (character.Race != null && character.Race.Id == _selectedRace.RaceModel.Id) { canDelete = false; break; } } if (canDelete) { string message = String.Format("Are you sure you want to delete {0}?", _selectedRace.Name); bool?result = _dialogService.ShowConfirmationDialog("Delete Race", message, "Yes", "No", null); if (result == true) { _compendium.DeleteRace(_selectedRace.RaceModel.Id); RaceListItemViewModel listItem = _races.FirstOrDefault(x => x.RaceModel.Id == _selectedRace.RaceModel.Id); if (listItem != null) { _races.Remove(listItem); } _selectedRace = null; _compendium.SaveRaces(); OnPropertyChanged(nameof(SelectedRace)); if (_editRaceXML != null) { CancelEditRace(); } } } else { _dialogService.ShowConfirmationDialog("Unable Delete Race", "Race is in use by a character.", "OK", null, null); } } }
private void SelectRace(RaceListItemViewModel race) { bool selectRace = true; if (_editRaceXML != null) { if (_editHasUnsavedChanges) { string body = String.Format("{0} has unsaved changes.{1}What would you like to do?", _selectedRace.Name, Environment.NewLine + Environment.NewLine); string accept = "Save and Continue"; string reject = "Discard Changes"; string cancel = "Cancel Navigation"; bool? result = _dialogService.ShowConfirmationDialog("Unsaved Changes", body, accept, reject, cancel); if (result == true) { if (!SaveEditRace()) { selectRace = false; } } else if (result == false) { CancelEditRace(); } else { selectRace = false; } } else { CancelEditRace(); } } if (selectRace) { foreach (RaceListItemViewModel item in _races) { item.IsSelected = false; } race.IsSelected = true; _selectedRace = new RaceViewModel(race.RaceModel); OnPropertyChanged(nameof(SelectedRace)); } }
private void SortRaces() { if (_races != null && _races.Count > 0) { List <RaceModel> races = _raceSearchService.Sort(_races.Select(x => x.RaceModel), _raceSearchInput.SortOption.Key); for (int i = 0; i < races.Count; ++i) { if (races[i].Id != _races[i].RaceModel.Id) { RaceListItemViewModel race = _races.FirstOrDefault(x => x.RaceModel.Id == races[i].Id); if (race != null) { _races.Move(_races.IndexOf(race), i); } } } } }
/// <summary> /// Searches, applying current sorting and filtering /// </summary> public void Search() { _races.Clear(); foreach (RaceModel raceModel in _raceSearchService.Search(_raceSearchInput)) { _races.Add(new RaceListItemViewModel(raceModel, _stringService)); } if (_selectedRace != null) { RaceListItemViewModel race = _races.FirstOrDefault(x => x.RaceModel.Id == _selectedRace.RaceModel.Id); if (race != null) { race.IsSelected = true; } } OnPropertyChanged(nameof(SortAndFilterHeader)); }
private void Copy() { if (_selectedRace != null) { bool copyRace = true; if (_editRaceXML != null) { if (_editHasUnsavedChanges) { string body = String.Format("{0} has unsaved changes.{1}What would you like to do?", _selectedRace.Name, Environment.NewLine + Environment.NewLine); string accept = "Save and Continue"; string reject = "Discard Changes"; string cancel = "Cancel Navigation"; bool? result = _dialogService.ShowConfirmationDialog("Unsaved Changes", body, accept, reject, cancel); if (result == true) { if (!SaveEditRace()) { copyRace = false; } } else if (result == false) { CancelEditRace(); } else { copyRace = false; } } else { CancelEditRace(); } } if (copyRace) { RaceModel newRace = new RaceModel(_selectedRace.RaceModel); newRace.Name += " (copy)"; newRace.Id = Guid.NewGuid(); newRace.XML = newRace.XML.Replace("<name>" + _selectedRace.RaceModel.Name + "</name>", "<name>" + newRace.Name + "</name>"); _compendium.AddRace(newRace); if (_raceSearchService.SearchInputApplies(_raceSearchInput, newRace)) { RaceListItemViewModel listItem = new RaceListItemViewModel(newRace, _stringService); _races.Add(listItem); foreach (RaceListItemViewModel item in _races) { item.IsSelected = false; } listItem.IsSelected = true; } _selectedRace = new RaceViewModel(newRace); SortRaces(); _compendium.SaveRaces(); OnPropertyChanged(nameof(SelectedRace)); } } }
private void Add() { bool addRace = true; if (_editRaceXML != null) { if (_editHasUnsavedChanges) { string body = String.Format("{0} has unsaved changes.{1}What would you like to do?", _selectedRace.Name, Environment.NewLine + Environment.NewLine); string accept = "Save and Continue"; string reject = "Discard Changes"; string cancel = "Cancel Navigation"; bool? result = _dialogService.ShowConfirmationDialog("Unsaved Changes", body, accept, reject, cancel); if (result == true) { if (!SaveEditRace()) { addRace = false; } } else if (result == false) { CancelEditRace(); } else { addRace = false; } } else { CancelEditRace(); } } if (addRace) { string xml = @"<name>New Race</name> <size></size> <speed></speed> <ability></ability> <spellAbility></spellAbility> <proficiency></proficiency> <trait> <name></name> <text></text> </trait>" ; RaceModel raceModel = _xmlImporter.GetRace(xml); _compendium.AddRace(raceModel); if (_raceSearchService.SearchInputApplies(_raceSearchInput, raceModel)) { RaceListItemViewModel listItem = new RaceListItemViewModel(raceModel, _stringService); _races.Add(listItem); foreach (RaceListItemViewModel item in _races) { item.IsSelected = false; } listItem.IsSelected = true; } _selectedRace = new RaceViewModel(raceModel); _editRaceXML = raceModel.XML; SortRaces(); _compendium.SaveRaces(); OnPropertyChanged(nameof(EditingRaceXML)); OnPropertyChanged(nameof(IsEditingRace)); OnPropertyChanged(nameof(SelectedRace)); } }
private bool SaveEditRace() { bool saved = false; try { RaceModel model = _xmlImporter.GetRace(_editRaceXML); if (model != null) { model.Id = _selectedRace.RaceModel.Id; _compendium.UpdateRace(model); _selectedRace = new RaceViewModel(model); RaceListItemViewModel oldListItem = _races.FirstOrDefault(x => x.RaceModel.Id == model.Id); if (oldListItem != null) { if (_raceSearchService.SearchInputApplies(_raceSearchInput, model)) { oldListItem.UpdateModel(model); } else { _races.Remove(oldListItem); } } _editRaceXML = null; _editHasUnsavedChanges = false; SortRaces(); _compendium.SaveRaces(); OnPropertyChanged(nameof(SelectedRace)); OnPropertyChanged(nameof(EditingRaceXML)); OnPropertyChanged(nameof(IsEditingRace)); OnPropertyChanged(nameof(HasUnsavedChanges)); saved = true; } else { string message = String.Format("Something went wrong...{0}{1}{2}{3}", Environment.NewLine + Environment.NewLine, "The following are required:", Environment.NewLine, "-name"); _dialogService.ShowConfirmationDialog("Unable To Save", message, "OK", null, null); } } catch (Exception ex) { string message = String.Format("Something went wrong...{0}{1}", Environment.NewLine + Environment.NewLine, ex.Message); _dialogService.ShowConfirmationDialog("Unable To Save", message, "OK", null, null); } return(saved); }