private TimeSpan UpdateTarget(int initialSourceValue, string initialTargetValue, string newTargetValue, TimeSpan steppingDuration) { bool updatedToFinalValue = false; _sourceObject.Value = initialSourceValue; var textBox = new TextBox { Text = initialTargetValue }; var binder = new SteppedBinder(textBox, TextBox.TextProperty, _innerBinding, steppingDuration); var stopwatch = new Stopwatch(); binder.Changed += (_, _) => { if (_sourceObject.Value.ToString() != newTargetValue) { return; } stopwatch.Stop(); updatedToFinalValue = true; }; stopwatch.Start(); binder.SetValue(TransientBinder.TargetProperty, newTargetValue); while (!updatedToFinalValue) { textBox.ProcessMessages(); } Dispatcher.CurrentDispatcher.InvokeShutdown(); return(stopwatch.Elapsed); }
/// <inheritdoc/> protected override object ExtendBinding(IServiceProvider serviceProvider, DependencyObject?targetObject, DependencyProperty targetProperty) { if (targetObject == null) { return(this); } UpdateBindingMode(targetObject, targetProperty); var binder = new SteppedBinder(targetObject, targetProperty, ActualBinding, SteppingDuration); FreezableCollection <TransientBinder> binders = TransientBinder.GetBinders(targetObject); binders.Add(binder); return(targetObject.GetValue(targetProperty)); }