MainWindowViewModel.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. using System.Reactive;
  2. using Avalonia.Controls;
  3. using Avalonia.Controls.ApplicationLifetimes;
  4. using Avalonia.Controls.Notifications;
  5. using Avalonia.Dialogs;
  6. using ReactiveUI;
  7. namespace ControlCatalog.ViewModels
  8. {
  9. class MainWindowViewModel : ReactiveObject
  10. {
  11. private IManagedNotificationManager _notificationManager;
  12. private bool _isMenuItemChecked = true;
  13. private WindowState _windowState;
  14. private WindowState[] _windowStates;
  15. public MainWindowViewModel(IManagedNotificationManager notificationManager)
  16. {
  17. _notificationManager = notificationManager;
  18. ShowCustomManagedNotificationCommand = ReactiveCommand.Create(() =>
  19. {
  20. NotificationManager.Show(new NotificationViewModel(NotificationManager) { Title = "Hey There!", Message = "Did you know that Avalonia now supports Custom In-Window Notifications?" });
  21. });
  22. ShowManagedNotificationCommand = ReactiveCommand.Create(() =>
  23. {
  24. NotificationManager.Show(new Avalonia.Controls.Notifications.Notification("Welcome", "Avalonia now supports Notifications.", NotificationType.Information));
  25. });
  26. ShowNativeNotificationCommand = ReactiveCommand.Create(() =>
  27. {
  28. NotificationManager.Show(new Avalonia.Controls.Notifications.Notification("Error", "Native Notifications are not quite ready. Coming soon.", NotificationType.Error));
  29. });
  30. AboutCommand = ReactiveCommand.CreateFromTask(async () =>
  31. {
  32. var dialog = new AboutAvaloniaDialog();
  33. var mainWindow = (App.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime)?.MainWindow;
  34. await dialog.ShowDialog(mainWindow);
  35. });
  36. ExitCommand = ReactiveCommand.Create(() =>
  37. {
  38. (App.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime).Shutdown();
  39. });
  40. ToggleMenuItemCheckedCommand = ReactiveCommand.Create(() =>
  41. {
  42. IsMenuItemChecked = !IsMenuItemChecked;
  43. });
  44. WindowState = WindowState.Normal;
  45. WindowStates = new WindowState[]
  46. {
  47. WindowState.Minimized,
  48. WindowState.Normal,
  49. WindowState.Maximized,
  50. WindowState.FullScreen,
  51. };
  52. }
  53. public WindowState WindowState
  54. {
  55. get { return _windowState; }
  56. set { this.RaiseAndSetIfChanged(ref _windowState, value); }
  57. }
  58. public WindowState[] WindowStates
  59. {
  60. get { return _windowStates; }
  61. set { this.RaiseAndSetIfChanged(ref _windowStates, value); }
  62. }
  63. public IManagedNotificationManager NotificationManager
  64. {
  65. get { return _notificationManager; }
  66. set { this.RaiseAndSetIfChanged(ref _notificationManager, value); }
  67. }
  68. public bool IsMenuItemChecked
  69. {
  70. get { return _isMenuItemChecked; }
  71. set { this.RaiseAndSetIfChanged(ref _isMenuItemChecked, value); }
  72. }
  73. public ReactiveCommand<Unit, Unit> ShowCustomManagedNotificationCommand { get; }
  74. public ReactiveCommand<Unit, Unit> ShowManagedNotificationCommand { get; }
  75. public ReactiveCommand<Unit, Unit> ShowNativeNotificationCommand { get; }
  76. public ReactiveCommand<Unit, Unit> AboutCommand { get; }
  77. public ReactiveCommand<Unit, Unit> ExitCommand { get; }
  78. public ReactiveCommand<Unit, Unit> ToggleMenuItemCheckedCommand { get; }
  79. }
  80. }