ContextPageViewModel.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 ContextPageViewModel
  9. {
  10. public Control? View { get; set; }
  11. public ContextPageViewModel()
  12. {
  13. OpenCommand = MiniCommand.CreateFromTask(Open);
  14. SaveCommand = MiniCommand.Create(Save);
  15. OpenRecentCommand = MiniCommand.Create<string>(OpenRecent);
  16. MenuItems = new[]
  17. {
  18. new MenuItemViewModel { Header = "_Open...", Command = OpenCommand },
  19. new MenuItemViewModel { Header = "Save", Command = SaveCommand },
  20. new MenuItemViewModel { Header = "-" },
  21. new MenuItemViewModel
  22. {
  23. Header = "Recent",
  24. Items = new[]
  25. {
  26. new MenuItemViewModel
  27. {
  28. Header = "File1.txt",
  29. Command = OpenRecentCommand,
  30. CommandParameter = @"c:\foo\File1.txt"
  31. },
  32. new MenuItemViewModel
  33. {
  34. Header = "File2.txt",
  35. Command = OpenRecentCommand,
  36. CommandParameter = @"c:\foo\File2.txt"
  37. },
  38. }
  39. },
  40. };
  41. }
  42. public IReadOnlyList<MenuItemViewModel> MenuItems { get; set; }
  43. public MiniCommand OpenCommand { get; }
  44. public MiniCommand SaveCommand { get; }
  45. public MiniCommand OpenRecentCommand { get; }
  46. public async Task Open()
  47. {
  48. var window = View?.GetVisualRoot() as Window;
  49. if (window == null)
  50. return;
  51. var result = await window.StorageProvider.OpenFilePickerAsync(new Avalonia.Platform.Storage.FilePickerOpenOptions() { AllowMultiple = true });
  52. foreach (var file in result)
  53. {
  54. System.Diagnostics.Debug.WriteLine($"Opened: {file.Name}");
  55. }
  56. }
  57. public void Save()
  58. {
  59. System.Diagnostics.Debug.WriteLine("Save");
  60. }
  61. public void OpenRecent(string path)
  62. {
  63. System.Diagnostics.Debug.WriteLine($"Open recent: {path}");
  64. }
  65. }
  66. }