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)); } }
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(); } }
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 })); } }
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 })); }