我期待創建UpdateSourceTrigger的自定義版本,可以使用我的綁定。我不知道這是否可能,或者相反,我需要創建自己的綁定類。我正在尋找的是,而不是LostFocus或PropertyChanged,有一些地方會在一定的時間限制後更新源。自定義UpdateSourceTrigger延遲?
我發現this,但我不知道是否有更好的方法(其中一條評論提到了一些內存泄漏與實施)。
任何想法?
我期待創建UpdateSourceTrigger的自定義版本,可以使用我的綁定。我不知道這是否可能,或者相反,我需要創建自己的綁定類。我正在尋找的是,而不是LostFocus或PropertyChanged,有一些地方會在一定的時間限制後更新源。自定義UpdateSourceTrigger延遲?
我發現this,但我不知道是否有更好的方法(其中一條評論提到了一些內存泄漏與實施)。
任何想法?
我不會打擾在綁定級別執行此操作,而是將其顯示在我的視圖模型中。當屬性更改時,重新啓動DispatcherTimer。當計時器到期時,啓動你的邏輯。就這麼簡單。
這可以使用Reactive Extensions的Throttle()方法和observable屬性輕鬆實現。
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;
}
}
我只注意到WPF 4.5有一個delay屬性,詳細信息請參考以下鏈接
http://www.shujaat.net/2011/12/wpf-45-developers-preview-delay-binding.html
謝謝...這是一個很好的功能,並且肯定會完成這項工作,但我們會再使用4.0一段時間。 – Thelonias