LoginView.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using CommunityToolkit.Mvvm.Messaging;
  2. using Terminal.Gui;
  3. namespace CommunityToolkitExample;
  4. internal partial class LoginView : IRecipient<Message<LoginAction>>
  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. SetText ();
  16. };
  17. passwordInput.TextChanged += (_, _) =>
  18. {
  19. ViewModel.Password = passwordInput.Text;
  20. SetText ();
  21. };
  22. loginButton.Accept += (_, _) =>
  23. {
  24. if (!ViewModel.CanLogin) { return; }
  25. ViewModel.LoginCommand.Execute (null);
  26. };
  27. clearButton.Accept += (_, _) =>
  28. {
  29. ViewModel.ClearCommand.Execute (null);
  30. SetText ();
  31. };
  32. Initialized += (_, _) => { ViewModel.Initialized (); };
  33. }
  34. public LoginViewModel ViewModel { get; set; }
  35. public void Receive (Message<LoginAction> message)
  36. {
  37. switch (message.Value)
  38. {
  39. case LoginAction.LoginProgress:
  40. {
  41. loginProgressLabel.Text = ViewModel.LoginProgressMessage;
  42. break;
  43. }
  44. case LoginAction.Validation:
  45. {
  46. validationLabel.Text = ViewModel.ValidationMessage;
  47. validationLabel.ColorScheme = ViewModel.ValidationColorScheme;
  48. break;
  49. }
  50. }
  51. SetText();
  52. Application.Refresh ();
  53. }
  54. private void SetText ()
  55. {
  56. usernameInput.Text = ViewModel.Username;
  57. usernameLengthLabel.Text = ViewModel.UsernameLengthMessage;
  58. passwordInput.Text = ViewModel.Password;
  59. passwordLengthLabel.Text = ViewModel.PasswordLengthMessage;
  60. }
  61. }