Я работаю над приложением WPF с ReactiveUI и пытаюсь создать простое окно аутентификации, например:
Текстовые поля должны стать шаблонами ошибок (красная граница) каккак только они пусты. Кроме того, в этом случае необходимо деактивировать кнопку входа в систему.
В отношении проверки входных данных просмотра существуют текущие проблемы, поскольку расширение 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
. Но они не работают вместе.
Что я пропускаю или делаю неправильно?