MenuPageViewModel.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System.Collections.Generic;
  2. using System.Threading.Tasks;
  3. using Avalonia.Controls;
  4. using Avalonia.VisualTree;
  5. using MiniMvvm;
  6. namespace ControlCatalog.ViewModels
  7. {
  8. public class MenuPageViewModel
  9. {
  10. public Control? View { get; set; }
  11. public MenuPageViewModel()
  12. {
  13. OpenCommand = MiniCommand.CreateFromTask(Open);
  14. SaveCommand = MiniCommand.Create(Save);
  15. OpenRecentCommand = MiniCommand.Create<string>(OpenRecent);
  16. var recentItems = new[]
  17. {
  18. new MenuItemViewModel
  19. {
  20. Header = "File1.txt",
  21. Command = OpenRecentCommand,
  22. CommandParameter = @"c:\foo\File1.txt"
  23. },
  24. new MenuItemViewModel
  25. {
  26. Header = "File2.txt",
  27. Command = OpenRecentCommand,
  28. CommandParameter = @"c:\foo\File2.txt"
  29. },
  30. };
  31. RecentItems = recentItems;
  32. MenuItems = new[]
  33. {
  34. new MenuItemViewModel
  35. {
  36. Header = "_File",
  37. Items = new[]
  38. {
  39. new MenuItemViewModel { Header = "O_pen...", Command = OpenCommand },
  40. new MenuItemViewModel { Header = "Save", Command = SaveCommand },
  41. new MenuItemViewModel { Header = "-" },
  42. new MenuItemViewModel
  43. {
  44. Header = "Recent",
  45. Items = recentItems
  46. },
  47. }
  48. },
  49. new MenuItemViewModel
  50. {
  51. Header = "_Edit",
  52. Items = new[]
  53. {
  54. new MenuItemViewModel { Header = "_Copy" },
  55. new MenuItemViewModel { Header = "_Paste" },
  56. }
  57. }
  58. };
  59. }
  60. public IReadOnlyList<MenuItemViewModel> MenuItems { get; set; }
  61. public IReadOnlyList<MenuItemViewModel> RecentItems { get; set; }
  62. public MiniCommand OpenCommand { get; }
  63. public MiniCommand SaveCommand { get; }
  64. public MiniCommand OpenRecentCommand { get; }
  65. public async Task Open()
  66. {
  67. var window = View?.GetVisualRoot() as Window;
  68. if (window == null)
  69. return;
  70. var result = await window.StorageProvider.OpenFilePickerAsync(new Avalonia.Platform.Storage.FilePickerOpenOptions() { AllowMultiple = true });
  71. if (result != null)
  72. {
  73. foreach (var file in result)
  74. {
  75. System.Diagnostics.Debug.WriteLine($"Opened: {file.Name}");
  76. }
  77. }
  78. }
  79. public void Save()
  80. {
  81. System.Diagnostics.Debug.WriteLine("Save");
  82. }
  83. public void OpenRecent(string path)
  84. {
  85. System.Diagnostics.Debug.WriteLine($"Open recent: {path}");
  86. }
  87. }
  88. }