Как заставить RxUI и WPF-валидацию работать вместе - PullRequest
0 голосов
/ 06 ноября 2019

Я работаю над приложением WPF с ReactiveUI и пытаюсь создать простое окно аутентификации, например:

LoginWindow Текстовые поля должны стать шаблонами ошибок (красная граница) каккак только они пусты. Кроме того, в этом случае необходимо деактивировать кнопку входа в систему.

В отношении проверки входных данных просмотра существуют текущие проблемы, поскольку расширение BindValidation() не работает должным образом. (см. пример: https://github.com/gerardo-lijs/ReactiveUI-Validation-Sample/blob/master/01-Basic-XAML/MainWindow.xaml.cs и рекомендуемое решение: ReactiveUI, WPF и проверка правильности )

Мой обходной путь содержит классическую привязку wpf из codebehinde и проверку с производными ValidationRule. Также как WhenAnyValue() проверки в модели представления, такие как:

IObservable<bool> canLogin = this
    .WhenAnyValue(
        x => x.UserName ,
        x => x.Password ,
        x => x.IsBusy ,
        (cn, un , pw , isBusy) =>
            !isBusy &&
            !String.IsNullOrEmpty(cn) &&
            !String.IsNullOrEmpty(un) &&
            !String.IsNullOrEmpty(pw));

LoginCommand = ReactiveCommand.CreateFromTask<string , bool>(_ => DoLogin() , canLogin);

Классические проверки WPF работают (граница становится красной), если я установил ValidationStep.RawProposedValue, а проверка реактивной кнопки работает с ValidationStep.UpdateValue. Но они не работают вместе.

Что я пропускаю или делаю неправильно?

...