PersonalPageViewModel.cs 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using AvaloniaApplicationPersonalPage.Models;
  5. using Microsoft.EntityFrameworkCore;
  6. using ReactiveUI;
  7. namespace AvaloniaApplicationPersonalPage.ViewModels
  8. {
  9. public class PersonalPageViewModel : ReactiveObject
  10. {
  11. UserBaseContext myConnection; // поле для передаваемого объекта для обращения к БД
  12. LoginTable? currentUser; // поле для заполнения данных о пользователе
  13. string oldPassword; // для хранения пароля пользователя
  14. bool isPasswordChange = false; // нужно ли показывать поля для изменения пароля (изначально они будут скрыты)
  15. public PersonalPageViewModel(UserBaseContext myConnection, int id)
  16. {
  17. this.myConnection = myConnection; // заполнение поля для обращения к БД
  18. // нахождение всей информации о пользователе по переданному id:
  19. CurrentUser = myConnection.LoginTables.Include(x=>x.IdRoleNavigation).Include(x=>x.UserTable.IdGenderNavigation).FirstOrDefault(x => x.IdLogin == id);
  20. oldPassword = currentUser.Password; // заполнение поля с паролем паролем найденного пользователя
  21. }
  22. public LoginTable? CurrentUser { get => currentUser; set => currentUser = value; } // свойсво для обращения к данным о пользователе в БД
  23. // свойство для вывода даты на экран и перезаписи даты в БД, если пользователь ее изменит
  24. public string DR
  25. {
  26. get => CurrentUser.UserTable.Date.ToString(); // считываем дату из БД
  27. set => CurrentUser.UserTable.Date = DateTime.Parse(value); // изменяем поле даты в БД на выбранное пользователем значение
  28. }
  29. public List<string> Genders =>myConnection.GenderTables.Select(x=>x.Gender).ToList(); // свойство дял заполнения списка с возможными значениями полов
  30. // свойство для вывода поля пользователя на экран и его изменения
  31. public string SelectedGender
  32. {
  33. get => CurrentUser.UserTable.IdGenderNavigation.Gender; // считываем пол из БД
  34. set => CurrentUser.UserTable.IdGender = myConnection.GenderTables.FirstOrDefault(x => x.Gender == value).IdGender; // изменяем поле с полом пользователя в таблице БД
  35. }
  36. public string Message { get => message; set => this.RaiseAndSetIfChanged(ref message,value); } // для вывода сообщении об изменении сохранений
  37. public string RepeatPassword { get => repeatPassword; set => repeatPassword = value; } // свойство, привязанное к полю для ввода повторения пароля
  38. public bool IsPasswordChange { get => isPasswordChange; set => this.RaiseAndSetIfChanged(ref isPasswordChange,value); } // свойство, привязанное к флажку, показывающему (или не показывающему) панель для изменения пароля
  39. string message; // поля для сообщения
  40. string repeatPassword; // поля для повторения
  41. public void SaveData() // метод для сохранения изменений
  42. {
  43. if (CurrentUser.Password == null || CurrentUser.Password == "") CurrentUser.Password = oldPassword; // если поля для изменения пароля не заполнены, то в базе оставляем старый пароль
  44. if (IsPasswordChange==(CurrentUser.Password == repeatPassword))
  45. {
  46. myConnection.SaveChanges();
  47. Message = "Изменения сохранены";
  48. }
  49. else
  50. {
  51. Message = "Пароли не совпадают";
  52. }
  53. }
  54. }
  55. }