LoginView.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. using CommunityToolkit.Mvvm.Messaging;
  2. using Terminal.Gui;
  3. namespace CommunityToolkitExample;
  4. internal partial class LoginView : IRecipient<Message<LoginActions>>
  5. {
  6. public LoginView (LoginViewModel viewModel)
  7. {
  8. WeakReferenceMessenger.Default.Register (this);
  9. Title = $"Community Toolkit MVVM Example - {Application.QuitKey} to Exit";
  10. ViewModel = viewModel;
  11. InitializeComponent ();
  12. usernameInput.TextChanged += (_, _) =>
  13. {
  14. ViewModel.Username = usernameInput.Text;
  15. };
  16. passwordInput.TextChanged += (_, _) =>
  17. {
  18. ViewModel.Password = passwordInput.Text;
  19. };
  20. loginButton.Accepting += (_, _) =>
  21. {
  22. if (!ViewModel.CanLogin) { return; }
  23. ViewModel.LoginCommand.Execute (null);
  24. };
  25. clearButton.Accepting += (_, _) =>
  26. {
  27. ViewModel.ClearCommand.Execute (null);
  28. };
  29. Initialized += (_, _) => { ViewModel.Initialized (); };
  30. }
  31. public LoginViewModel ViewModel { get; set; }
  32. public void Receive (Message<LoginActions> message)
  33. {
  34. switch (message.Value)
  35. {
  36. case LoginActions.Clear:
  37. {
  38. loginProgressLabel.Text = ViewModel.LoginProgressMessage;
  39. validationLabel.Text = ViewModel.ValidationMessage;
  40. validationLabel.ColorScheme = ViewModel.ValidationColorScheme;
  41. break;
  42. }
  43. case LoginActions.LoginProgress:
  44. {
  45. loginProgressLabel.Text = ViewModel.LoginProgressMessage;
  46. break;
  47. }
  48. case LoginActions.Validation:
  49. {
  50. validationLabel.Text = ViewModel.ValidationMessage;
  51. validationLabel.ColorScheme = ViewModel.ValidationColorScheme;
  52. break;
  53. }
  54. }
  55. SetText();
  56. Application.Refresh ();
  57. }
  58. private void SetText ()
  59. {
  60. usernameInput.Text = ViewModel.Username;
  61. usernameLengthLabel.Text = ViewModel.UsernameLengthMessage;
  62. passwordInput.Text = ViewModel.Password;
  63. passwordLengthLabel.Text = ViewModel.PasswordLengthMessage;
  64. }
  65. }