如何推迟WPF TextBox中的更新

时间:2015-03-20 08:21:18

标签: c# wpf

从.NET 4.5开始,BindingBase类现在包含Delay属性。这样可以设置一个整数,该整数表示Framework在更新数据源之前将等待的毫秒数。但是,我希望Framework在更新UserControl之前等待。换句话说,我正在寻找一种方法来实现类似Delay属性的东西,但以其他方式

在我的特定情况下,我有一个绑定到Double值的TextBox。由于源快速变化,用户无法在TextBox中发现值。

我考虑将过滤器实现为IValueConverter的实现。不幸的是,这不起作用,因为我在ListBox中排列了几个TextBox。由于它们都使用相同的ValueConverter-Object,因此我无法将先前值的队列存储到该ValueConverter中。

是否有一种通用的方法来过滤WPF TextBox的Text属性,以便当源值变化非常快时,用户可以看到内容?

1 个答案:

答案 0 :(得分:-1)

在您的情况下,您可以使用Stopwatch来跳过某些更改。

private readonly Stopwatch _watch;
private double _yourValue;

public Ctor()
{
    _watch = Stopwatch.StartNew();
}

public double YourValue
{
    get { return _yourValue; }
    set
    {
        if (Math.Abs(value - _yourValue) < Double.Epsilon) return;
        // Always save value
        _yourValue = value;
        // Only trigger notification after a certain amount of time 
        // (e.g. once every second)
        if (_watch.ElapsedMilliseconds > 1000)
        {
            OnPropertyChanged();
            _watch.Restart();
        }
    }
}