AbstractMatcher.cs 905 B

12345678910111213141516171819202122232425262728293031323334353637
  1. namespace InABox.Avalonia.Converters;
  2. public enum MatchComparison
  3. {
  4. EqualTo,
  5. NotEqualTo
  6. }
  7. public enum MatchType
  8. {
  9. Any,
  10. All
  11. }
  12. public class AbstractMatcher<T> : AbstractMultiConverter<T,bool>
  13. {
  14. public MatchComparison Comparison { get; set; }
  15. public MatchType Type { get; set; }
  16. public T Value { get; set; }
  17. protected override bool Convert(IEnumerable<T> value, object parameter = null)
  18. {
  19. var result = Type switch
  20. {
  21. MatchType.Any => Comparison == MatchComparison.EqualTo
  22. ? value.Any(x => Equals(Value, x))
  23. : value.Any(x => !Equals(Value, x)),
  24. MatchType.All => Comparison == MatchComparison.EqualTo
  25. ? value.All(x => Equals(Value, x))
  26. : value.All(x => !Equals(Value, x)),
  27. _ => false
  28. };
  29. return result;
  30. }
  31. }