自定义带有延迟的UpdateSourceTrigger



我希望创建一个自定义版本的UpdateSourceTrigger,我可以使用我的绑定。我不知道这是否可能,或者我是否需要创建自己的绑定类。我要找的是,而不是LostFocus或PropertyChanged,有一些东西,它会在一些指定的时间限制后更新源。

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

任何想法?

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

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

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

这可以通过响应式扩展的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;
  }
}

相关内容

  • 没有找到相关文章

最新更新