LoginView.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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 += (_, e) =>
  21. {
  22. if (!ViewModel.CanLogin) { return; }
  23. ViewModel.LoginCommand.Execute (null);
  24. // Anytime Accepting is handled, make sure to set e.Cancel to false.
  25. e.Cancel = false;
  26. };
  27. clearButton.Accepting += (_, e) =>
  28. {
  29. ViewModel.ClearCommand.Execute (null);
  30. // Anytime Accepting is handled, make sure to set e.Cancel to false.
  31. e.Cancel = false;
  32. };
  33. Initialized += (_, _) => { ViewModel.Initialized (); };
  34. }
  35. public LoginViewModel ViewModel { get; set; }
  36. public void Receive (Message<LoginActions> message)
  37. {
  38. switch (message.Value)
  39. {
  40. case LoginActions.Clear:
  41. {
  42. loginProgressLabel.Text = ViewModel.LoginProgressMessage;
  43. validationLabel.Text = ViewModel.ValidationMessage;
  44. validationLabel.ColorScheme = ViewModel.ValidationColorScheme;
  45. break;
  46. }
  47. case LoginActions.LoginProgress:
  48. {
  49. loginProgressLabel.Text = ViewModel.LoginProgressMessage;
  50. break;
  51. }
  52. case LoginActions.Validation:
  53. {
  54. validationLabel.Text = ViewModel.ValidationMessage;
  55. validationLabel.ColorScheme = ViewModel.ValidationColorScheme;
  56. break;
  57. }
  58. }
  59. SetText();
  60. // BUGBUG: This should not be needed:
  61. Application.LayoutAndDraw ();
  62. }
  63. private void SetText ()
  64. {
  65. usernameInput.Text = ViewModel.Username;
  66. usernameLengthLabel.Text = ViewModel.UsernameLengthMessage;
  67. passwordInput.Text = ViewModel.Password;
  68. passwordLengthLabel.Text = ViewModel.PasswordLengthMessage;
  69. }
  70. }