Ejemplo n.º 1
0
        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));
        }