自定义UpdateSourceTrigger延迟?

时间:2011-11-04 17:28:42

标签: wpf data-binding binding updatesourcetrigger

我正在寻找创建一个可以与我的绑定一起使用的UpdateSourceTrigger的自定义版本。我不知道这是否可行,或者相反,我需要创建自己的绑定类。我正在寻找的是,而不是LostFocus或PropertyChanged,它会在一些指定的时间限制之后更新源。

我找到this,但我不知道是否有更好的方法(其中一条评论提到了一些内存泄漏与实现)。

有什么想法吗?

3 个答案:

答案 0 :(得分:11)

我刚注意到WPF 4.5有一个延迟属性,有关此链接的更多信息,请参阅

http://www.shujaat.net/2011/12/wpf-45-developers-preview-delay-binding.html

答案 1 :(得分:5)

我不会在绑定级别上这样做,但会在我的视图模型中显示它。属性更改时,重新启动DispatcherTimer。当计时器到期时,启动你的逻辑。就这么简单。

答案 2 :(得分:0)

使用Reactive Extensions的Throttle()方法和可观察的属性可以很容易地实现这一点。

public class ObservablePropertyBacking<T> : IObservable<T>
{
  private readonly Subject<T> _innerObservable = new Subject<T>();

  private T _value;

  public T Value
  {
    get { return _value; }
    set
    {
      _value = value;
      _innerObservable.OnNext(value);
    }
  }

  #region IObservable<T> Members

  public IDisposable Subscribe(IObserver<T> observer)
  {
    return _innerObservable
      .DistinctUntilChanged()
      .AsObservable()
      .Subscribe(observer);
  }

  #endregion
}

像这样使用:

// wire query observable
var queryActual = new ObservablePropertyBacking<string>();
queryActual.Throttle(TimeSpan.FromMilliseconds(300)).Subscribe(DoSearch);

实施属性:

string query;

public string Query
{
  get { return query; }
  set
  {
    queryActual.Value = value;
  }
}