結合考慮以下視圖模型屬性:延遲的從源
private string _slowProperty;
public string SlowProperty
{
get { return _slowProperty; }
set
{
_slowProperty = value;
RaisePropertyChanged("SlowProperty");
}
}
這是綁定到一個文本框,如下所示:
<TextBox Text="{Binding SlowProperty}" />
現在,這裏的問題是,每次的價值SlowProperty的變化很常見,文本框會去嘗試獲取它的值,這很慢。我可以使用異步綁定來緩解這種情況,但是,這仍然會浪費CPU週期。
相反,我想擁有的是一樣的東西:
<TextBlock Text="{z:DelayedSourceBinding SlowProperty}" />
這將嘗試獲得一定的延時後綁定。例如,如果SlowProperty
在短時間內連續更改了5次,則只有最後一個文本在文本框中可見。
我發現,執行類似的東西following project,所以我的例子,我可以使用它,像這樣:
<TextBox Text="{z:DelayBinding Path=SearchText}" />
它的問題是,它僅更新結合目標後延遲。但是,源路徑會被評估,並且每次更改源時都會執行其獲取器。其中,在SlowProperty
的情況下仍然會浪費CPU週期。
我試過讓自己的延遲綁定類,但got stuck。有沒有其他的活頁夾可以做到這些?
爲了完整起見,這裏有2個執行類似任務的其他項目,到目前爲止,還沒有解決這個問題我遇到:
DeferredBinding - 類似的解決方案,以DelayBinding。但是,使用起來要複雜一點。
DelayedBindingTextBox - 使用自定義文本框控件實現延遲綁定。
謝謝!
科林,優秀。所有CS問題都可以通過添加另一個間接層來解決! :) – 2011-12-30 22:32:30
你可能是對的,這確實是一個應該在VM級別解決的問題。儘管如此,我仍然想知道是否可以進行自定義綁定,就像我所描述的那樣。 – VitalyB 2011-12-30 22:43:55