static public PropertyBindingBuilder <TModel, TView, TModelValue> From <TModel, TView, TModelValue>( this IPropertyBindingsProvider <TModel, TView> propertyBindingsProvider, Expression <Func <TModel, TModelValue> > modelPropertyGetterExpression) { string propertyName = ExpressionUtils.GetPropertyMemberExpression(modelPropertyGetterExpression).Member.Name; Func <TModel, TModelValue> getter = modelPropertyGetterExpression.Compile(); return(new PropertyBindingBuilder <TModel, TView, TModelValue>(propertyBindingsProvider.PropertyBindings, propertyName, (m, v) => getter(m))); }
static public ArrayBindingBuilder <TModel, TView, TModelItem, TModelItem> FromArray <TModel, TView, TModelItem>( this IArrayBindingsProvider <TModel, TView> arrayBindingsProvider, Expression <Func <TModel, IArray <TModelItem> > > modelPropertyGetterExpression) { MemberExpression memberExpression = ExpressionUtils.GetPropertyMemberExpression(modelPropertyGetterExpression); string propertyName = memberExpression.Member.Name; UnaryExpression eventSourceGetterExpression = Expression.Convert(memberExpression, typeof(INotifyArrayChanged)); Func <TModel, INotifyArrayChanged> eventSourceGetter = Expression.Lambda <Func <TModel, INotifyArrayChanged> >(eventSourceGetterExpression, modelPropertyGetterExpression.Parameters).Compile(); Func <TModel, IArray <TModelItem> > referenceGetter = modelPropertyGetterExpression.Compile(); return(new ArrayBindingBuilder <TModel, TView, TModelItem, TModelItem>(arrayBindingsProvider.ArrayBindings, propertyName, eventSourceGetter, referenceGetter, (m, x, v, y) => x)); }
static public CollectionBindingBuilder <TModel, TView, TModelItem, TModelItem> FromCollection <TModel, TView, TModelItem>( this ICollectionBindingsProvider <TModel, TView> collectionBindingsProvider, Expression <Func <TModel, IEnumerable <TModelItem> > > modelPropertyGetterExpression) { MemberExpression memberExpression = ExpressionUtils.GetPropertyMemberExpression(modelPropertyGetterExpression); string propertyName = memberExpression.Member.Name; UnaryExpression eventSourceGetterExpression = Expression.Convert(memberExpression, typeof(INotifyCollectionChanged)); Func <TModel, INotifyCollectionChanged> eventSourceGetter = Expression.Lambda <Func <TModel, INotifyCollectionChanged> >(eventSourceGetterExpression, modelPropertyGetterExpression.Parameters).Compile(); Func <TModel, IEnumerable <TModelItem> > referenceGetter = modelPropertyGetterExpression.Compile(); return(new CollectionBindingBuilder <TModel, TView, TModelItem, TModelItem>(collectionBindingsProvider.CollectionBindings, propertyName, eventSourceGetter, referenceGetter, (m, x, v) => x, EqualityComparer <TModelItem> .Default.Equals)); }
static public PathBindingBuilder <TModel, TView, TModelValue> FromPath <TModel, TView, TModelValue>( this IPathBindingsProvider <TModel, TView> pathBindingsProvider, Expression <Func <TModel, TModelValue> > modelPropertyGetterExpression, Expression <Func <TModelValue, string> > modelPropertyPathGetter) { MemberExpression memberExpression = ExpressionUtils.GetPropertyMemberExpression(modelPropertyGetterExpression); string propertyName = memberExpression.Member.Name; InvocationExpression pathGetterBody = Expression.Invoke(modelPropertyPathGetter, modelPropertyGetterExpression.Body); Func <TModel, string> pathGetter = Expression.Lambda <Func <TModel, string> >(pathGetterBody, modelPropertyGetterExpression.Parameters).Compile(); Func <TModel, TModelValue> getter = modelPropertyGetterExpression.Compile(); return(new PathBindingBuilder <TModel, TView, TModelValue>(pathBindingsProvider.PathBindings, propertyName, (m, v) => getter(m), pathGetter)); }