static public ArrayBindingBuilder <TModel, TView, TModelItem, TNewViewItem> SelectItems <TModel, TView, TModelItem, TOldViewItem, TNewViewItem>( this IArrayBindingBuilder <TModel, TView, TModelItem, TOldViewItem> builder, Func <TModel, TModelItem, TView, TNewViewItem, TNewViewItem> itemConverter, Action <TNewViewItem> viewItemDisposer = null) { var newBuilder = new ArrayBindingBuilder <TModel, TView, TModelItem, TNewViewItem>(builder); IArrayBindingBuilder <TModel, TView, TModelItem, TNewViewItem> interfaceBuilder = newBuilder; interfaceBuilder.ReferenceGetter = builder.ReferenceGetter; interfaceBuilder.ItemConverter = itemConverter; interfaceBuilder.ViewItemDisposer = viewItemDisposer; return(newBuilder); }
static public void To <TModel, TView, TModelItem, TViewItem, TViewArray, TCreatedArray>( this IArrayBindingBuilder <TModel, TView, TModelItem, TViewItem> binding, Expression <Func <TView, TViewArray> > arrayGetterExpression, Action <TModel, TView, TViewArray, int[]> arrayResizer = null, Func <TModel, TView, int[], TCreatedArray> arrayCreator = null) where TViewArray : IWriteableArray <TViewItem> where TCreatedArray : TViewArray { Func <TView, TViewArray> arrayGetter = arrayGetterExpression.Compile(); var arrayMemberExpression = (MemberExpression)arrayGetterExpression.Body; ParameterExpression setterValueParameter = Expression.Parameter(typeof(TViewArray)); Expression setterBodyExpression = Expression.Assign(arrayMemberExpression, setterValueParameter); Action <TView, TViewArray> arraySetter = Expression.Lambda <Action <TView, TViewArray> >(setterBodyExpression, arrayGetterExpression.Parameters[0], setterValueParameter).Compile(); binding.To(arrayGetter, arraySetter, arrayResizer, arrayCreator); }
public ArrayBindingBuilder(IArrayBindingBuilder <TModel, TView> builder) { _bindingCollection = builder.BindingCollection; _referencePropertyName = builder.ReferencePropertyName; _subscriptionGetter = builder.SubscriptionGetter; }