Пример #1
0
        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)));
        }
Пример #2
0
        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));
        }
Пример #3
0
        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));
        }
Пример #4
0
        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));
        }