Esempio n. 1
0
        public IReactiveBinding <TView, TViewModel, TProp> BindCommand <TView, TViewModel, TProp, TControl, TParam>(
            TViewModel viewModel,
            TView view,
            Expression <Func <TViewModel, TProp> > vmProperty,
            Expression <Func <TView, TControl> > controlProperty,
            IObservable <TParam> withParameter,
            string toEvent = null)
            where TViewModel : class
            where TView : class, IViewFor <TViewModel>
            where TProp : ICommand
        {
            var vmExpression      = Reflection.Rewrite(vmProperty.Body);
            var controlExpression = default(Expression);

            if (controlProperty == null)
            {
                controlExpression = Reflection.getViewExpression(view, vmExpression);
            }
            else
            {
                controlExpression = Reflection.Rewrite(controlProperty.Body);
            }

            var source = Reflection.ViewModelWhenAnyValue(viewModel, view, vmExpression).Cast <TProp>();

            IDisposable bindingDisposable = bindCommandInternal(source, view, controlExpression, withParameter, toEvent);

            return(new ReactiveBinding <TView, TViewModel, TProp>(view, viewModel, controlExpression, vmExpression,
                                                                  source, BindingDirection.OneWay, bindingDisposable));
        }
Esempio n. 2
0
        public IReactiveBinding <TView, TViewModel, TProp> BindCommand <TView, TViewModel, TProp, TControl, TParam>(
            TViewModel viewModel,
            TView view,
            Expression <Func <TViewModel, TProp> > vmProperty,
            Expression <Func <TView, TControl> > controlProperty,
            Func <TParam> withParameter,
            string toEvent = null)
            where TViewModel : class
            where TView : class, IViewFor <TViewModel>
            where TProp : ICommand
        {
            var vmExpression      = Reflection.Rewrite(vmProperty.Body);
            var controlExpression = default(Expression);

            if (controlProperty == null)
            {
                controlExpression = Reflection.getViewExpression(view, vmExpression);
            }
            else
            {
                controlExpression = Reflection.Rewrite(controlProperty.Body);
            }

            var source = Reflection.ViewModelWhenAnyValue(viewModel, view, vmExpression).Cast <TProp>();

            IDisposable bindingDisposable = bindCommandInternal(source, view, controlExpression, Observable.Empty <object>(), toEvent, cmd => {
                var rc = cmd as IReactiveCommand;
                if (rc == null)
                {
                    return(new RelayCommand(cmd.CanExecute, _ => cmd.Execute(withParameter())));
                }

                var ret = ReactiveCommand.Create(rc.CanExecuteObservable);
                ret.Subscribe(_ => rc.Execute(withParameter()));
                return(ret);
            });

            return(new ReactiveBinding <TView, TViewModel, TProp>(view, viewModel, controlExpression, vmExpression,
                                                                  source, BindingDirection.OneWay, bindingDisposable));
        }