2013-09-17 3 views
2

Я использовал ReactiveUI 5, но теперь мне нужно выполнить проверку в моей модели ViewModel, поэтому я использовал ReactiveValidatedObject, как описано в документах. Конфигурация была сделана так же, как в примере версии 4, но, похоже, она не работает. Запуск кода примера работает хорошо, но с версией 5 он не работает, мой метод проверки, определенный в атрибуте ValidatesViaMethod, не запускается.Validation on ReactiveUi 5

Я дважды проверял каждую вещь и ее равный образцу кода, с простой проверкой текстового поля и ничего.

Я не знаю ничего другого, что можно было бы сделать. Есть ли другой способ сделать валидацию с ReactiveUI? Я не могу найти документацию или примеры того, как это сделать для версии 4.

кроме Это мой ViewMode, я использую ReactiveValidatedObject от версии 4 и маршрутизации от версии 5.

public class InputViewModel : ReactiveValidatedObject , IRoutableViewModel 
{ 
    bool val; 
    bool invalid = false; 

    public InputViewModel(IScreen hostscreen) 
    {    
     ValidationObservable.Subscribe(x => IsValid = this.IsObjectValid());     
     var whenAnyValuesChange = this.WhenAny(x => x.IsValid, x => x.Value);      
     HostScreen = hostscreen ?? RxApp.DependencyResolver.GetService<IScreen>(); 
    } 

    [ValidatesViaMethod(AllowBlanks = false, AllowNull = false, Name = "IsNameValid", ErrorMessage = "Favor informe o nome corretamente")] 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      this.RaiseAndSetIfChanged(ref _name, value); 
     } 
    } 

    public bool IsNameValid(string name) 
    { 
     return name.Length >= 2; 
    } 

    public IScreen HostScreen 
    { 
     get; 
     private set; 
    } 

    public string UrlPathSegment 
    { 
     get { return "InputView"; } 
    } 

    public Simulation Simulation { get; set; } 

    private bool _IsValid; 
    public bool IsValid 
    { 
     get { return _IsValid; } 
     set { this.RaiseAndSetIfChanged(ref _IsValid, value); } 
    } 
} 
+0

Пожалуйста, разместите фрагмент кода, чтобы помочь пользователям решить вопрос. –

ответ

1

Если вам нужно больше контроля над проверкой, я бы предложил дать FluentValidation. Он прекрасно интегрируется с любой инфраструктурой MVVM и, используя InlineValidator, вы можете решать более сложные сценарии проверки по сравнению с проверкой на основе свойств. Я использую его сам в большинстве своих проектов.

+0

Поддерживает ли это использование Observables? – SuperJMN

+0

Обновлена ​​ссылка для FluentValidation: http://github.com/JeremySkinner/FluentValidation – SuperJMN

 Смежные вопросы

  • Нет связанных вопросов^_^