56 lines
1.6 KiB
C#
56 lines
1.6 KiB
C#
using Microsoft.UI.Xaml;
|
|
using Microsoft.UI.Xaml.Markup;
|
|
using Toolkit.Foundation;
|
|
|
|
namespace Toolkit.UI.WinUI;
|
|
|
|
[ContentProperty(Name = nameof(Conditions))]
|
|
public class ConditionalExpression :
|
|
DependencyObject,
|
|
ICondition
|
|
{
|
|
public static readonly DependencyProperty ConditionsProperty =
|
|
DependencyProperty.Register(nameof(Conditions),
|
|
typeof(ConditionCollection), typeof(ConditionalExpression),
|
|
new PropertyMetadata(new ConditionCollection()));
|
|
|
|
public static readonly DependencyProperty ForwardChainingProperty =
|
|
DependencyProperty.Register(nameof(ForwardChaining),
|
|
typeof(ForwardChaining), typeof(ConditionalExpression),
|
|
new PropertyMetadata(ForwardChaining.And));
|
|
|
|
public ConditionalExpression()
|
|
{
|
|
SetValue(ConditionsProperty, new ConditionCollection());
|
|
}
|
|
|
|
public ConditionCollection Conditions =>
|
|
(ConditionCollection)GetValue(ConditionsProperty);
|
|
|
|
public ForwardChaining ForwardChaining
|
|
{
|
|
get => (ForwardChaining)GetValue(ForwardChainingProperty);
|
|
set => SetValue(ForwardChainingProperty, value);
|
|
}
|
|
|
|
public bool Evaluate()
|
|
{
|
|
bool result = false;
|
|
foreach (var operation in Conditions)
|
|
{
|
|
result = operation.Evaluate();
|
|
|
|
if (!result && ForwardChaining == ForwardChaining.And)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (result && ForwardChaining == ForwardChaining.Or)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return result;
|
|
}
|
|
} |