ProjectNode.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System.Collections.ObjectModel;
  2. using System.ComponentModel;
  3. using System.Runtime.CompilerServices;
  4. namespace Quadarax.Application.Tools.Vsix.FilteredSolutionsExtension.Models
  5. {
  6. public class ProjectNode : INotifyPropertyChanged
  7. {
  8. private bool _isSelected = true;
  9. private bool _isVisible = true;
  10. public string Name { get; set; }
  11. public string Path { get; set; }
  12. public string ProjectGuid { get; set; }
  13. public string TypeGuid { get; set; }
  14. public ObservableCollection<ProjectNode> Dependencies { get; set; }
  15. public ObservableCollection<ProjectNode> Dependents { get; set; }
  16. public bool IsSelected
  17. {
  18. get => _isSelected;
  19. set
  20. {
  21. if (_isSelected != value)
  22. {
  23. _isSelected = value;
  24. OnPropertyChanged();
  25. UpdateDependencies(value);
  26. }
  27. }
  28. }
  29. public bool IsVisible
  30. {
  31. get => _isVisible;
  32. set
  33. {
  34. _isVisible = value;
  35. OnPropertyChanged();
  36. }
  37. }
  38. public ProjectNode()
  39. {
  40. Dependencies = new ObservableCollection<ProjectNode>();
  41. Dependents = new ObservableCollection<ProjectNode>();
  42. }
  43. private void UpdateDependencies(bool isSelected)
  44. {
  45. if (isSelected)
  46. {
  47. // When selecting, select all dependencies
  48. foreach (var dependency in Dependencies)
  49. {
  50. dependency.IsSelected = true;
  51. }
  52. }
  53. else
  54. {
  55. // When deselecting, deselect all dependents
  56. foreach (var dependent in Dependents)
  57. {
  58. dependent.IsSelected = false;
  59. }
  60. }
  61. }
  62. public event PropertyChangedEventHandler PropertyChanged;
  63. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
  64. {
  65. PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  66. }
  67. }
  68. }