PseudoClassViewModel.cs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Avalonia.Controls;
  2. namespace Avalonia.Diagnostics.ViewModels
  3. {
  4. internal class PseudoClassViewModel : ViewModelBase
  5. {
  6. private readonly IPseudoClasses _pseudoClasses;
  7. private readonly StyledElement _source;
  8. private bool _isActive;
  9. private bool _isUpdating;
  10. public PseudoClassViewModel(string name, StyledElement source)
  11. {
  12. Name = name;
  13. _source = source;
  14. _pseudoClasses = _source.Classes;
  15. Update();
  16. }
  17. public string Name { get; }
  18. public bool IsActive
  19. {
  20. get => _isActive;
  21. set
  22. {
  23. RaiseAndSetIfChanged(ref _isActive, value);
  24. if (!_isUpdating)
  25. {
  26. _pseudoClasses.Set(Name, value);
  27. }
  28. }
  29. }
  30. public void Update()
  31. {
  32. try
  33. {
  34. _isUpdating = true;
  35. IsActive = _source.Classes.Contains(Name);
  36. }
  37. finally
  38. {
  39. _isUpdating = false;
  40. }
  41. }
  42. }
  43. }