MainWindowViewModel.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. // Copyright (c) The Perspex Project. All rights reserved.
  2. // Licensed under the MIT license. See licence.md file in the project root for full license information.
  3. using System;
  4. using System.Collections.Generic;
  5. using ReactiveUI;
  6. using Perspex.Controls;
  7. namespace XamlTestApplication.ViewModels
  8. {
  9. public class MainWindowViewModel
  10. {
  11. public MainWindowViewModel()
  12. {
  13. Items = new List<TestItem>();
  14. for (int i = 0; i < 10; ++i)
  15. {
  16. Items.Add(new TestItem($"Item {i}", $"Item {i} Value"));
  17. }
  18. Nodes = new List<TestNode>
  19. {
  20. new TestNode
  21. {
  22. Header = "Root",
  23. SubHeader = "Root Item",
  24. IsExpanded = true,
  25. Children = new[]
  26. {
  27. new TestNode
  28. {
  29. Header = "Child 1",
  30. SubHeader = "Child 1 Value",
  31. },
  32. new TestNode
  33. {
  34. Header = "Child 2",
  35. SubHeader = "Child 2 Value",
  36. IsExpanded = false,
  37. Children = new[]
  38. {
  39. new TestNode
  40. {
  41. Header = "Grandchild",
  42. SubHeader = "Grandchild Value",
  43. },
  44. new TestNode
  45. {
  46. Header = "Grandmaster Flash",
  47. SubHeader = "White Lines",
  48. },
  49. }
  50. },
  51. }
  52. }
  53. };
  54. CollapseNodesCommand = ReactiveCommand.Create();
  55. CollapseNodesCommand.Subscribe(_ => ExpandNodes(false));
  56. ExpandNodesCommand = ReactiveCommand.Create();
  57. ExpandNodesCommand.Subscribe(_ => ExpandNodes(true));
  58. OpenFileCommand = ReactiveCommand.Create();
  59. OpenFileCommand.Subscribe(_ =>
  60. {
  61. var ofd = new OpenFileDialog();
  62. ofd.ShowAsync();
  63. });
  64. OpenFolderCommand = ReactiveCommand.Create();
  65. OpenFolderCommand.Subscribe(_ =>
  66. {
  67. var ofd = new OpenFolderDialog();
  68. ofd.ShowAsync();
  69. });
  70. shell = ShellViewModel.Instance;
  71. }
  72. private ShellViewModel shell;
  73. public ShellViewModel Shell
  74. {
  75. get { return shell; }
  76. set { shell = value; }
  77. }
  78. public List<TestItem> Items { get; }
  79. public List<TestNode> Nodes { get; }
  80. public ReactiveCommand<object> CollapseNodesCommand { get; }
  81. public ReactiveCommand<object> ExpandNodesCommand { get; }
  82. public ReactiveCommand<object> OpenFileCommand { get; }
  83. public ReactiveCommand<object> OpenFolderCommand { get; }
  84. public void ExpandNodes(bool expanded)
  85. {
  86. foreach (var node in Nodes)
  87. {
  88. ExpandNodes(node, expanded);
  89. }
  90. }
  91. private void ExpandNodes(TestNode node, bool expanded)
  92. {
  93. node.IsExpanded = expanded;
  94. if (node.Children != null)
  95. {
  96. foreach (var child in node.Children)
  97. {
  98. ExpandNodes(child, expanded);
  99. }
  100. }
  101. }
  102. }
  103. }