New binding mechanism: Expression tracking

This commit is contained in:
2023-08-15 13:17:42 +02:00
parent 335433562a
commit b792639635
35 changed files with 971 additions and 311 deletions

View File

@@ -0,0 +1,31 @@
using System.Linq.Expressions;
namespace TerminalUI.ExpressionTrackers;
public sealed class ParameterTracker : ExpressionTrackerBase
{
private readonly ExpressionParameterTrackerCollection _trackerCollection;
private readonly string _parameterName;
public ParameterTracker(
ParameterExpression parameterExpression,
ExpressionParameterTrackerCollection trackerCollection,
string parameterName)
{
_trackerCollection = trackerCollection;
_parameterName = parameterName;
trackerCollection.ValueChanged += TrackerCollectionOnValueChanged;
UpdateValueAndChangeTrackers();
}
private void TrackerCollectionOnValueChanged(string parameterName, object? newValue)
=> UpdateValueAndChangeTrackers();
protected override object? ComputeValue()
{
_trackerCollection.Values.TryGetValue(_parameterName, out var v);
return v;
}
}