質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

Q&A

解決済

2回答

3420閲覧

WPF マルチバインディング

sadokazu

総合スコア14

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

WPF

Windows Presentation Foundation (WPF) は、魅力的な外観のユーザー エクスペリエンスを持つ Windows クライアント アプリケーションを作成するための次世代プレゼンテーション システムです

0グッド

0クリップ

投稿2019/05/11 06:28

WPFのBindingで質問があります
複数の値が同じかどうかの条件はわかるのですが、Orの条件がわかりません

Xaml

1 <Style x:Key="Test" TargetType="Button"> 2 <Style.Triggers> 3 <MultiDataTrigger> 4 <MultiDataTrigger.Conditions> 5 <Condition Binding="{Binding Test1}" Value="1"/> 6 <Condition Binding="{Binding Test2}" Value="1"/> 7 <Condition Binding="{Binding Test3}" Value="1"/> 8 </MultiDataTrigger.Conditions> 9 <Setter Property="Background" Value="Red"/> 10 </MultiDataTrigger> 11 12 <MultiDataTrigger> 13 <MultiDataTrigger.Conditions> 14 <Condition Binding="{Binding Test1}" Value="0"/> 15 <Condition Binding="{Binding Test2}" Value="0"/> 16 <Condition Binding="{Binding Test3}" Value="0"/> 17 </MultiDataTrigger.Conditions> 18 <Setter Property="Background" Value="Blue"/> 19 </MultiDataTrigger> 20 </Style.Triggers> 21 </Style> 22

この場合はTest1の値が0だった場合はBackgroundが青
1だった場合は赤になるのですが、
ここにどれか一つが1だったらという条件を追加したいのですが、方法がわかりません。

ご教授願えないでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

MultiDataTriggerを使うなら全てのパターンのMultiDataTriggerを書くぐらいしか方法はありません。
それよりも、3つの入力に対して色を出力するMultiConverterを作れば大分すっきりすると思います。
もっといいのはOR条件を使わないように見直すことです。

投稿2019/05/11 07:02

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

かなり無理矢理ですが
どれか一つでも1だった場合に動作するコンバーターを用意してMultiBindingしてみました

c#

1 /// <summary> 2 /// Orで動作するコンバーター 3 /// </summary> 4 public class AnyMultiValueConverter : IMultiValueConverter 5 { 6 public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 7 { 8 //return values.Cast<bool>().Contains(true); 9 10 for(int i = 0; i < values.Length; i++) { 11 if((int)values[i] == 1) { 12 return true; 13 } 14 } 15 16 return false; 17 } 18 19 public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 20 { 21 throw new NotImplementedException(); 22 } 23 } 24

Xaml

1 <DataTrigger Value="true"> 2 <DataTrigger.Binding> 3 <MultiBinding Converter="{StaticResource AnyConverter}"> 4 <Binding Path="Test1" /> 5 <Binding Path="Test2" /> 6 <Binding Path="Test3" /> 7 </MultiBinding> 8 </DataTrigger.Binding> 9 <Setter Property="Background" Value="Yellow" /> 10 </DataTrigger> 11

これで
Test1~3のどれか一つが1だったらBackgroundがYellowに変化します。

コンバーターの記述がかなり無理矢理なのでシンプルにしたいところですが・・・。

とりあえず解決したの良いかと。

投稿2019/05/11 12:46

sadokazu

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問