LoginView.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  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. // BUGBUG: This should not be needed:
  57. Application.LayoutAndDraw ();
  58. }
  59. private void SetText ()
  60. {
  61. usernameInput.Text = ViewModel.Username;
  62. usernameLengthLabel.Text = ViewModel.UsernameLengthMessage;
  63. passwordInput.Text = ViewModel.Password;
  64. passwordLengthLabel.Text = ViewModel.PasswordLengthMessage;
  65. }
  66. }