2011-11-04 86 views
4

我期待創建UpdateSourceTrigger的自定義版本,可以使用我的綁定。我不知道這是否可能,或者相反,我需要創建自己的綁定類。我正在尋找的是,而不是LostFocus或PropertyChanged,有一些地方會在一定的時間限制後更新源。自定義UpdateSourceTrigger延遲?

我發現this,但我不知道是否有更好的方法(其中一條評論提到了一些內存泄漏與實施)。

任何想法?

回答

5

我不會打擾在綁定級別執行此操作,而是將其顯示在我的視圖模型中。當屬性更改時,重新啓動DispatcherTimer。當計時器到期時,啓動你的邏輯。就這麼簡單。

0

這可以使用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; 
    } 
}