ContextPageViewModel.cs 2.5 KB

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