私は何かに行き詰まっており、簡単な答えを願っています。まず、マルチバインディング トリガーを持つテーマがあります。
<DataTrigger Value="True">
<DataTrigger.Binding>
<MultiBinding Converter="{StaticResource MyConverter}" >
<Binding Path=".TemplatedParent" RelativeSource="{RelativeSource Self}" />
<Binding Path="IsEnabled" RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</DataTrigger.Binding>
<Setter Property="Background" Value="{StaticResource NewBackgroundColor}" />
<Setter Property="BorderBrush" Value="{StaticResource NewBorderBrushColor}" />
</DataTrigger>
私のデータ コントロールのテキスト ボックス、コンボ ボックスには INotifyPropertyChanged が実装されています。
処理中、特定の条件下で、「IsEnabled」が変更されたが、実際にはその値が変更されていないというイベントを発生させたい。そのため、マルチバインディングがトリガーされることはありません。コンバーターへの最初のパラメーターはコントロール オブジェクト自体であるため、「変更」されることはありません。そのため、コンバーターへのパラメーターとして操作するためにそこにあるだけです。
実際にトリガーを起動する唯一の方法は、次のようなことをすることです
MyControl.IsEnabled = false;
MyControl.IsEnabled = true;
マルチバインディングデータトリガーを強制的にトリガーする他の方法はありますか?
私の問題についてもう少し詳しく説明してみてください。特定の設定/機能などを追加するために、基本的なコントロール (テキストボックス、コンボボックス、ボタンなど) をサブクラス化しました。それらの共通性のために、それらはすべて「IMyCommonInterface」インターフェイスをサポートします。「テーマ」全体 (単純なテキスト ボックスなど) を再定義する必要なく、データ検証を行うように条件付きで色を変更したいのですが、これらのサンプル プロパティの単純な色の変更だけではありません。
基本的なテキスト ボックスには "IMyCommonInterface" もカスタム プロパティも含まれていないため、実際のコントロール オブジェクトを最初のパラメーターとして受け取るコンバーター クラス "MyConverter" を作成しました。今、カバーター内で、私はできる
if( values[0] is IMyCommonInterface )
次に、インターフェイスに型キャストし、明示的に作成する必要なく、必要な特別な条件をすべてチェックできます..A + BまたはA + Cまたは(A + B NOT C)OR Dなどに基づいて、それぞれ1ダースのトリガーを作成します.
だから、私はたくさんの異なるテーマやたくさんのトリガーなどを持ちたくはありませんでした。私は他の代替案を検討していますが、PropertyChanged イベントをスローするだけではデータ トリガーが強制されないインスタンスに遭遇した場合は、.ネットにはあり、基本的にほとんど何でも指すことができます。