protected override void OnAttached(CompositeDisposable disposables)
    {
        if (AssociatedObject is null)
        {
            return;
        }

        var hasErrors = AssociatedObject.GetObservable(DataValidationErrors.HasErrorsProperty);
        var text      = AssociatedObject.GetObservable(TextBox.TextProperty);

        hasErrors.Select(_ => Unit.Default)
        .Merge(text.Select(_ => Unit.Default))
        .Throttle(TimeSpan.FromMilliseconds(100))
        .ObserveOn(RxApp.MainThreadScheduler)
        .Subscribe(_ =>
        {
            if (AssociatedObject is { } &&
                !DataValidationErrors.GetHasErrors(AssociatedObject) &&
                !string.IsNullOrEmpty(AssociatedObject.Text) &&
                KeyboardNavigationHandler.GetNext(AssociatedObject, NavigationDirection.Next) is
                { } nextFocus)
            {
                nextFocus.Focus();
            }
        })
        public void SelectedItem_Validation()
        {
            RunTest((control, textbox) =>
            {
                var exception      = new InvalidCastException("failed validation");
                var itemObservable = new BehaviorSubject <BindingNotification>(new BindingNotification(exception, BindingErrorType.DataValidationError));
                control.Bind(AutoCompleteBox.SelectedItemProperty, itemObservable);
                Dispatcher.UIThread.RunJobs();

                Assert.Equal(DataValidationErrors.GetHasErrors(control), true);
                Assert.Equal(DataValidationErrors.GetErrors(control).SequenceEqual(new[] { exception }), true);
            });
        }
        public void Value_Validation()
        {
            RunTest((control, textbox) =>
            {
                var exception       = new InvalidCastException("failed validation");
                var valueObservable = new BehaviorSubject <BindingNotification>(new BindingNotification(exception, BindingErrorType.DataValidationError));
                control.Bind(NumericUpDown.ValueProperty, valueObservable);
                Dispatcher.UIThread.RunJobs();

                Assert.True(DataValidationErrors.GetHasErrors(control));
                Assert.True(DataValidationErrors.GetErrors(control).SequenceEqual(new[] { exception }));
            });
        }
        public void Setter_Exceptions_Should_Set_DataValidationErrors_HasErrors()
        {
            using (UnitTestApplication.Start(Services))
            {
                var target = new TextBox
                {
                    DataContext             = new ExceptionTest(),
                    [!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10), BindingMode.TwoWay),
                    Template = CreateTemplate(),
                };

                target.ApplyTemplate();

                Assert.False(DataValidationErrors.GetHasErrors(target));
                target.Text = "20";
                Assert.True(DataValidationErrors.GetHasErrors(target));
                target.Text = "1";
                Assert.False(DataValidationErrors.GetHasErrors(target));
            }
        }
Exemplo n.º 5
0
        protected override void OnKeyDown(KeyEventArgs e)
        {
            var keymap = AvaloniaLocator.Current.GetService <PlatformHotkeyConfiguration>();

            if (keymap.Paste.Any(g => g.Matches(e)))
            {
                CustomPaste();
                e.Handled = true;
            }
            else
            {
                base.OnKeyDown(e);
            }

            if (Text == "" && DataValidationErrors.GetHasErrors(this))
            {
                Text = "0";
                SelectAll();
            }
        }
Exemplo n.º 6
0
        public void SelectedItem_Validation()
        {
            using (UnitTestApplication.Start(TestServices.MockThreadingInterface))
            {
                var target = new ComboBox
                {
                    Template           = GetTemplate(),
                    VirtualizationMode = ItemVirtualizationMode.None
                };

                target.ApplyTemplate();
                target.Presenter.ApplyTemplate();

                var exception      = new System.InvalidCastException("failed validation");
                var textObservable = new BehaviorSubject <BindingNotification>(new BindingNotification(exception, BindingErrorType.DataValidationError));
                target.Bind(ComboBox.SelectedItemProperty, textObservable);

                Assert.True(DataValidationErrors.GetHasErrors(target));
                Assert.True(DataValidationErrors.GetErrors(target).SequenceEqual(new[] { exception }));
            }
        }
Exemplo n.º 7
0
        public void SelectedItem_Validation()
        {
            var target = new ListBox
            {
                Template           = ListBoxTemplate(),
                Items              = new[] { "Foo" },
                ItemTemplate       = new FuncDataTemplate <string>((_, __) => new Canvas()),
                SelectionMode      = SelectionMode.AlwaysSelected,
                VirtualizationMode = ItemVirtualizationMode.None
            };

            Prepare(target);

            var exception      = new System.InvalidCastException("failed validation");
            var textObservable = new BehaviorSubject <BindingNotification>(new BindingNotification(exception, BindingErrorType.DataValidationError));

            target.Bind(ComboBox.SelectedItemProperty, textObservable);

            Assert.True(DataValidationErrors.GetHasErrors(target));
            Assert.True(DataValidationErrors.GetErrors(target).SequenceEqual(new[] { exception }));
        }