から結合遅れは次のViewModelプロパティを考えてみましょう:Aはソース
テキストボックスにバインドされている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です。そんなことをすることができる他のバインダーはありますか? DelayBindingと同様のソリューション -
DeferredBinding:完全性期すため
、ここ2つの、他の同様のタスクを実行するプロジェクト、まだ、どれもアドレスの問題、私は経験していますがあります。しかし、それは少し複雑です。
DelayedBindingTextBox - カスタムテキストボックスコントロールを使用して遅延バインディングを実装します。
ありがとうございます!
コリン、間違いの別のレイヤーを追加することで、すべてのCSの問題を解決できます! :) –
あなたは正しいかもしれませんが、これは確かにVMレベルで解決すべき問題です。しかし、私はまだ私が説明したようなカスタムバインディングを行うことが可能かどうかを知りたいと思います。 – VitalyB