我想创建一个自定义的UpdateSourceTrigger版本,以便在绑定时使用。我不知道这是否可能,或者我是否需要创建自己的绑定类。我所期望的是,在失去焦点或属性更改之外,有一种方式可以在指定的时间限制后更新源。
我找到了这个,但我不知道是否有更好的方法(其中一个评论提到了实现中的一些内存泄漏)。
有什么想法吗?
我找到了这个,但我不知道是否有更好的方法(其中一个评论提到了实现中的一些内存泄漏)。
有什么想法吗?
我刚刚注意到WPF 4.5有一个"Delay Property",更多信息请参见以下链接:
http://www.shujaat.net/2011/12/wpf-45-developers-preview-delay-binding.html
这可以很容易地通过使用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;
}
}