MainWindowViewModel.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. }
  71. public List<TestItem> Items { get; }
  72. public List<TestNode> Nodes { get; }
  73. public ReactiveCommand<object> CollapseNodesCommand { get; }
  74. public ReactiveCommand<object> ExpandNodesCommand { get; }
  75. public ReactiveCommand<object> OpenFileCommand { get; }
  76. public ReactiveCommand<object> OpenFolderCommand { get; }
  77. public void ExpandNodes(bool expanded)
  78. {
  79. foreach (var node in Nodes)
  80. {
  81. ExpandNodes(node, expanded);
  82. }
  83. }
  84. private void ExpandNodes(TestNode node, bool expanded)
  85. {
  86. node.IsExpanded = expanded;
  87. if (node.Children != null)
  88. {
  89. foreach (var child in node.Children)
  90. {
  91. ExpandNodes(child, expanded);
  92. }
  93. }
  94. }
  95. }
  96. }