using Avalonia; using Avalonia.Metadata; using Toolkit.Foundation; namespace Toolkit.UI.Avalonia; public class ConditionalExpression : AvaloniaObject, ICondition { public static readonly StyledProperty ConditionsProperty = AvaloniaProperty.Register(nameof(Conditions)); public static readonly StyledProperty ForwardChainingProperty = AvaloniaProperty.Register(nameof(ForwardChaining)); public ConditionalExpression() => SetValue(ConditionsProperty, []); [Content] public ConditionCollection Conditions => GetValue(ConditionsProperty); public ForwardChaining ForwardChaining { get => GetValue(ForwardChainingProperty); set => SetValue(ForwardChainingProperty, value); } public bool Evaluate() { bool result = false; foreach (ComparisonCondition operation in this.Conditions) { result = operation.Evaluate(); if (result == false && ForwardChaining == ForwardChaining.And) { return result; } if (result == true && ForwardChaining == ForwardChaining.Or) { return result; } } return result; } }