7

現在、 MultiDataTriggers (スタイルごとに 8 ~ 10 個のマルチ データ トリガー、トリガーごとに 4 ~ 6 個の条件)を多用するスタイルを使用する XAML を分析しています。これを見て、特に MultiDataTriggers をデバッグできないため、コンバーター(または多値コンバーター)を使用する方が効率的かどうかを検討しています。

MultiDataTriggers がどのようにコンパイルされているかを正式に述べることができる人はいますか? 条件が ANDで結合されていることは理解していますが、これはショートカットが機能するようにコンパイルされていますか?

複数の MultiDataTriggers はどうですか? それらは短絡されているため、最初の 1 つが完全に満たされると評価が停止しますか? それとも、いくつかが満足している場合、最後に勝ったものですべて評価されますか?

4

2 に答える 2

2

Bindingsコンバーターを使用すると、デバッグやより複雑なロジックを実行できますが、変更の 1 つが発生するたびにすべてをチェックし、外部関数を呼び出す必要がありBindingsます。そのため、ほとんどの場合、トリガーよりも遅くなります。トリガーは、最初の不適合条件で停止します。

したがって、私の答えは、できる限り MutiDataTrigger を使用することです。より多くのロジックが必要な場合は、いくつかの条件が他の場所で繰り返される可能性があるかどうかに応じて、追加の実装を選択できますDependencyProperty(他のいくつかのプロパティが変更されると変更されます) ) またはコンバーターを使用します。

たとえば、バインドしたい 5 つのプロパティがあります。

IsChecked = A && B && (C || D || !E)
IsReadonly = !A && !B && (C || D || !E)

したがって、新しいプロパティ F を作成し、C || D || !Eこれら 3 つの変更のいずれかが更新されたときに更新しFます。Fこれで、3 番目のトリガー バインディング パスとして使用できます。

于 2013-11-10T11:40:44.583 に答える