MainWindowViewModel.cs 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  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. namespace XamlTestApplication.ViewModels
  7. {
  8. public class MainWindowViewModel
  9. {
  10. public MainWindowViewModel()
  11. {
  12. Items = new List<TestItem>();
  13. for (int i = 0; i < 10; ++i)
  14. {
  15. Items.Add(new TestItem($"Item {i}", $"Item {i} Value"));
  16. }
  17. Nodes = new List<TestNode>
  18. {
  19. new TestNode
  20. {
  21. Header = "Root",
  22. SubHeader = "Root Item",
  23. IsExpanded = true,
  24. Children = new[]
  25. {
  26. new TestNode
  27. {
  28. Header = "Child 1",
  29. SubHeader = "Child 1 Value",
  30. },
  31. new TestNode
  32. {
  33. Header = "Child 2",
  34. SubHeader = "Child 2 Value",
  35. IsExpanded = false,
  36. Children = new[]
  37. {
  38. new TestNode
  39. {
  40. Header = "Grandchild",
  41. SubHeader = "Grandchild Value",
  42. },
  43. new TestNode
  44. {
  45. Header = "Grandmaster Flash",
  46. SubHeader = "White Lines",
  47. },
  48. }
  49. },
  50. }
  51. }
  52. };
  53. CollapseNodesCommand = ReactiveCommand.Create();
  54. CollapseNodesCommand.Subscribe(_ => ExpandNodes(false));
  55. ExpandNodesCommand = ReactiveCommand.Create();
  56. ExpandNodesCommand.Subscribe(_ => ExpandNodes(true));
  57. }
  58. public List<TestItem> Items { get; }
  59. public List<TestNode> Nodes { get; }
  60. public ReactiveCommand<object> CollapseNodesCommand { get; }
  61. public ReactiveCommand<object> ExpandNodesCommand { get; }
  62. public void ExpandNodes(bool expanded)
  63. {
  64. foreach (var node in Nodes)
  65. {
  66. ExpandNodes(node, expanded);
  67. }
  68. }
  69. private void ExpandNodes(TestNode node, bool expanded)
  70. {
  71. node.IsExpanded = expanded;
  72. if (node.Children != null)
  73. {
  74. foreach (var child in node.Children)
  75. {
  76. ExpandNodes(child, expanded);
  77. }
  78. }
  79. }
  80. }
  81. }