MenuPageViewModel.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using System.Collections.Generic;
  2. using System.Reactive;
  3. using System.Threading.Tasks;
  4. using Avalonia.Controls;
  5. using ReactiveUI;
  6. namespace ControlCatalog.ViewModels
  7. {
  8. public class MenuPageViewModel
  9. {
  10. public MenuPageViewModel()
  11. {
  12. OpenCommand = ReactiveCommand.CreateFromTask(Open);
  13. SaveCommand = ReactiveCommand.Create(Save);
  14. OpenRecentCommand = ReactiveCommand.Create<string>(OpenRecent);
  15. MenuItems = new[]
  16. {
  17. new MenuItemViewModel
  18. {
  19. Header = "_File",
  20. Items = new[]
  21. {
  22. new MenuItemViewModel { Header = "_Open...", Command = OpenCommand },
  23. new MenuItemViewModel { Header = "Save", Command = SaveCommand },
  24. new MenuItemViewModel { Header = "-" },
  25. new MenuItemViewModel
  26. {
  27. Header = "Recent",
  28. Items = new[]
  29. {
  30. new MenuItemViewModel
  31. {
  32. Header = "File1.txt",
  33. Command = OpenRecentCommand,
  34. CommandParameter = @"c:\foo\File1.txt"
  35. },
  36. new MenuItemViewModel
  37. {
  38. Header = "File2.txt",
  39. Command = OpenRecentCommand,
  40. CommandParameter = @"c:\foo\File2.txt"
  41. },
  42. }
  43. },
  44. }
  45. },
  46. new MenuItemViewModel
  47. {
  48. Header = "_Edit",
  49. Items = new[]
  50. {
  51. new MenuItemViewModel { Header = "_Copy" },
  52. new MenuItemViewModel { Header = "_Paste" },
  53. }
  54. }
  55. };
  56. }
  57. public IReadOnlyList<MenuItemViewModel> MenuItems { get; set; }
  58. public ReactiveCommand<Unit, Unit> OpenCommand { get; }
  59. public ReactiveCommand<Unit, Unit> SaveCommand { get; }
  60. public ReactiveCommand<string, Unit> OpenRecentCommand { get; }
  61. public async Task Open()
  62. {
  63. var dialog = new OpenFileDialog();
  64. var result = await dialog.ShowAsync(App.Current.MainWindow);
  65. if (result != null)
  66. {
  67. foreach (var path in result)
  68. {
  69. System.Diagnostics.Debug.WriteLine($"Opened: {path}");
  70. }
  71. }
  72. }
  73. public void Save()
  74. {
  75. System.Diagnostics.Debug.WriteLine("Save");
  76. }
  77. public void OpenRecent(string path)
  78. {
  79. System.Diagnostics.Debug.WriteLine($"Open recent: {path}");
  80. }
  81. }
  82. }