Example #1
0
    public static IDisposable BindValidationEx <TView, TViewModel, TViewModelProperty>(
        this TView view,
        TViewModel?viewModel,
        Expression <Func <TViewModel, TViewModelProperty?> > viewModelProperty,
        TextInputLayout viewProperty,
        IValidationTextFormatter <string>?formatter = null)
        where TView : IViewFor <TViewModel>
        where TViewModel : class, IReactiveObject, IValidatableViewModel
    {
        if (view is null)
        {
            throw new ArgumentNullException(nameof(view));
        }

        if (viewModelProperty is null)
        {
            throw new ArgumentNullException(nameof(viewModelProperty));
        }

        if (viewProperty is null)
        {
            throw new ArgumentNullException(nameof(viewProperty));
        }

        formatter ??= Locator.Current.GetService <IValidationTextFormatter <string> >() ??
        SingleLineFormatter.Default;

        return(ValidationBinding.ForProperty(
                   view,
                   viewModelProperty,
                   (_, errors) => viewProperty.Error = errors.FirstOrDefault(msg => !string.IsNullOrEmpty(msg)),
                   formatter));
    }
        public static IDisposable BindValidation <TView, TViewModel, TViewModelProperty, TViewProperty>(
            this TView view,
            TViewModel viewModel,
            Expression <Func <TViewModel, TViewModelProperty> > viewModelProperty,
            Expression <Func <TView, TViewProperty> > viewProperty,
            IValidationTextFormatter <string>?formatter = null)
            where TView : IViewFor <TViewModel>
            where TViewModel : class, IReactiveObject, IValidatableViewModel
        {
            if (viewModel is null)
            {
                throw new ArgumentNullException(nameof(viewModel));
            }

            if (viewModelProperty is null)
            {
                throw new ArgumentNullException(nameof(viewModelProperty));
            }

            if (viewProperty is null)
            {
                throw new ArgumentNullException(nameof(viewProperty));
            }

            return(ValidationBinding.ForProperty(view, viewModelProperty, viewProperty, formatter));
        }
Example #3
0
 /// <summary>
 /// Platform binding to the <see cref="TextInputLayout"/>
 /// </summary>
 /// <typeparam name="TView"></typeparam>
 /// <typeparam name="TViewModel"></typeparam>
 /// <typeparam name="TViewModelProp"></typeparam>
 /// <param name="view"></param>
 /// <param name="viewModel"></param>
 /// <param name="viewModelProperty"></param>
 /// <param name="viewProperty"></param>
 /// <returns></returns>
 public static IDisposable BindValidation <TView, TViewModel, TViewModelProp>(this TView view,
                                                                              TViewModel viewModel, Expression <Func <TViewModel, TViewModelProp> > viewModelProperty,
                                                                              TextInputLayout viewProperty)
     where TViewModel : ReactiveObject, ISupportsValidation
     where TView : IViewFor <TViewModel>
 {
     return(ValidationBinding.ForProperty(view, viewModelProperty, (ValidationState v, string f) => viewProperty.Error = f, SingleLineFormatter.Default));
 }
 public static IDisposable BindValidation <TView, TViewModel, TViewModelProperty, TViewProperty>(
     this TView view,
     TViewModel viewModel,
     Expression <Func <TViewModel, TViewModelProperty> > viewModelProperty,
     Expression <Func <TView, TViewProperty> > viewProperty)
     where TView : IViewFor <TViewModel>
     where TViewModel : ReactiveObject, IValidatableViewModel
 {
     return(ValidationBinding.ForProperty(view, viewModelProperty, viewProperty));
 }
 public static IDisposable BindValidation<TView, TViewModel, TViewModelProperty>(
     this TView view,
     TViewModel viewModel,
     Expression<Func<TViewModel, TViewModelProperty>> viewModelProperty,
     TextInputLayout viewProperty)
     where TView : IViewFor<TViewModel>
     where TViewModel : ReactiveObject, IValidatableViewModel
 {
     return ValidationBinding.ForProperty(
         view,
         viewModelProperty,
         (_, errorText) => viewProperty.Error = errorText,
         SingleLineFormatter.Default);
 }
Example #6
0
 public static IDisposable BindValidationEx <TView, TViewModel, TViewModelProperty>(
     this TView view,
     TViewModel viewModel,
     Expression <Func <TViewModel, TViewModelProperty> > viewModelProperty,
     TextInputLayout viewProperty)
     where TView : IViewFor <TViewModel>
     where TViewModel : ReactiveObject, IValidatableViewModel
 {
     return(ValidationBinding.ForProperty(
                view,
                viewModelProperty,
                (_, errors) => viewProperty.Error = errors.FirstOrDefault(msg => !string.IsNullOrEmpty(msg)),
                SingleLineFormatter.Default));
 }
        public void ShouldSupportActionBindingRequiredForPlatformSpecificImplementations()
        {
            const string nameErrorMessage = "Name should not be empty.";
            var          view             = new TestView(new TestViewModel {
                Name = string.Empty
            });

            view.ViewModel.ValidationRule(
                vm => vm.Name,
                s => !string.IsNullOrEmpty(s),
                nameErrorMessage);

            ValidationBinding.ForProperty <TestView, TestViewModel, string, string>(
                view,
                viewModel => viewModel.Name,
                (_, errorText) => view.NameErrorLabel = errorText.FirstOrDefault(msg => !string.IsNullOrEmpty(msg)),
                SingleLineFormatter.Default);

            Assert.False(view.ViewModel.ValidationContext.IsValid);
            Assert.Equal(1, view.ViewModel.ValidationContext.Validations.Count);
            Assert.NotEmpty(view.NameErrorLabel);
            Assert.Equal(nameErrorMessage, view.NameErrorLabel);
        }