WPF ReactiveValidation ошибка отображается через раз

Изучаю фреймворк Reactiveui, а в частности Validation. Заметил такой баг(или я что-то не так делаю). Создал тестовый проект, модель, добавил к ней валидацию. Добавил кнопку, доступность которой зависит от валидности модели. Все прекрасно работает, но как только заполнены все свойства, а для теста я их сделал 3, то при неправильно введенных значениях ошибки во View отображаются через 1 раз.

Например: Есть 3 свойства: Username, Age и Password. Я их заполняю правильно и IsValid == true. Но, как только я добавлю пробел к Username(тем самым нарушу его валидность), то кнопка сразу станет недоступной как и должна, а вот никакой ошибки под полем с именем я не увижу. Для этого мне придется еще раз ввести любой символ.

Решение сделано через шаблон Prism на .net core 3.1. Использовал:

  1. MaterialDesignThemes
  2. Prism.Unity
  3. ReactiveUi.Fody
  4. ReactiveUI.Validation
  5. ReactiveUI.WPF

Все библиотеки последних версий.

Код:

User.cs

    public class User : ReactiveValidationObject<User>
    {
        [Reactive]
        public string Username { get; set; } = "asd";

        [Reactive]
        public string Age { get; set; } = string.Empty;

        [Reactive]
        public string Password { get; set; } = string.Empty;

        public User()
        {
            
            this.ValidationRule(
                x => x.Username,
                username => !string.IsNullOrWhiteSpace(username),
                "Имя пользователя не может быть пустым");

            this.ValidationRule(
                x => x.Username,
                username => !username.Contains(" "),
                "Имя не должно содержать пробелы");

            this.ValidationRule(
                x => x.Age,
                age => !string.IsNullOrWhiteSpace(age),
                "Тратата");

            this.ValidationRule(
                x => x.Password,
                pass => !string.IsNullOrWhiteSpace(pass),
                "Пароль не может быть пустым");
        }
    }

LoginViewModel.cs

    public class LoginViewModel : ReactiveObject
    {
        [Reactive]
        public User User { get; set; }

        public ReactiveCommand<Unit, Unit> Connect { get; }
{ get; set; }

        public LoginViewModel()
        {
            User = new User();
            Connect = ReactiveCommand.Create(()=>{}, User.IsValid());
        }
    }

LoginView.xaml

<rxui:ReactiveUserControl x:Class="ReactiveValidation.Views.LoginView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:vms="clr-namespace:ReactiveValidation.ViewModels"
             x:TypeArguments="vms:LoginViewModel"
             xmlns:rxui="http://reactiveui.net"
             xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
             xmlns:prism="http://prismlibrary.com/"             
             prism:ViewModelLocator.AutoWireViewModel="True">
    
    <StackPanel>
        <TextBox Text="{Binding User.Username, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                 md:HintAssist.Hint="Имя пользователя" Style="{DynamicResource MaterialDesignFloatingHintTextBox}"/>

        <TextBox Text="{Binding User.Age, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                 md:HintAssist.Hint="Возраст" Style="{DynamicResource MaterialDesignFloatingHintTextBox}"/>

        <TextBox Text="{Binding User.Password, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                 md:HintAssist.Hint="Пароль" Style="{DynamicResource MaterialDesignFloatingHintTextBox}"/>

        <Button Content="Вход" Command="{Binding Connect}" Width="150"/>
    </StackPanel>
</rxui:ReactiveUserControl>

Ответы (0 шт):