New controls, main view

This commit is contained in:
2023-08-09 20:40:54 +02:00
parent d549733b71
commit 7dcca6363b
41 changed files with 668 additions and 234 deletions

View File

@@ -6,20 +6,44 @@ namespace TerminalUI.Extensions;
public static class Binding
{
public static Binding<TDataContext, TResult> Bind<TView, TDataContext, TResult>(
public static Binding<TDataContext, TResult, TResult> Bind<TView, TDataContext, TResult>(
this TView targetView,
IView<TDataContext> dataSourceView,
Expression<Func<TDataContext?, TResult>> dataContextExpression,
Expression<Func<TView, TResult>> propertyExpression)
Expression<Func<TView, TResult>> propertyExpression,
TResult? fallbackValue = default)
{
if (propertyExpression.Body is not MemberExpression {Member: PropertyInfo propertyInfo})
throw new AggregateException(nameof(propertyExpression) + " must be a property expression");
return new Binding<TDataContext, TResult>(
dataSourceView,
dataContextExpression,
targetView,
propertyInfo
return new Binding<TDataContext, TResult, TResult>(
dataSourceView,
dataContextExpression,
targetView,
propertyInfo,
value => value,
fallbackValue
);
}
public static Binding<TDataContext, TExpressionResult, TResult> Bind<TView, TDataContext, TExpressionResult, TResult>(
this TView targetView,
IView<TDataContext> dataSourceView,
Expression<Func<TDataContext?, TExpressionResult>> dataContextExpression,
Expression<Func<TView, TResult>> propertyExpression,
Func<TExpressionResult, TResult> converter,
TResult? fallbackValue = default)
{
if (propertyExpression.Body is not MemberExpression {Member: PropertyInfo propertyInfo})
throw new AggregateException(nameof(propertyExpression) + " must be a property expression");
return new Binding<TDataContext, TExpressionResult, TResult>(
dataSourceView,
dataContextExpression,
targetView,
propertyInfo,
converter,
fallbackValue
);
}
}