トップ回答者
データバインディングの初期値

質問
-
WPFのBindingについて質問です。
XAMLのある要素のプロパティ値をBindingクラスのPath指定してデータバインディングさせようとしているのですが、
このPathの参照先がない場合は固定値(関数optional引数でいう既定値的なもの)、ある場合はその参照値を適用させたいです。
参照先が無い場合の固定値はxaml内で定義したいです。
例としては下記のような構造です。
<Grid>
<Label Content="文字列" Visibility={"Binding Path=Sample}"/> <!--Sampleを定義しているファイルをプロジェクトに含めない場合がある--><!--Visibilityの既定値的なものをこの周辺で指定?-->
</Grid>
このような構造でSampleがない場合、Visibilityを"Visible", ある場合"Hidden"にするという感じです。
PriorityBindingではプロパティ値の変更方法が見出せませんでした。
何かしら解決方法を教えて頂けると助かります。よろしくお願いします。
- 編集済み tenpu 2014年1月31日 2:15
回答
-
まずPriorityBindingに対する私の認識としては、FallbackValue含め文字列を返すことしかできないと思っています。
任意のオブジェクトを指定できます。列挙体なら{x:Static Visibility.Hidden}のようにx:Staticマークアップ拡張を使用できます。
あるいはリソースに定義しておいて{StaticResource ...}を使用することもできます。
<Binding><Binding.FallbackValue><Visibility>Hidden</Visibility</Binding.FallbackValue>のような指定も可能です。
まあバインディングターゲットがVisibility型なら、文字列で記述しても暗黙に型変換を試みるので、単にHidden等と書いても列挙体の場合は問題ないですが。
さて、XAMLの中身は検証していませんが、バインディングをXAMLで表現できているのなら
<Label Content="文字列"> <Label.Visibility> <PriorityBinding ...>
でいいんでは。
PriorityBindingサンプルは <TextBlock.Text>に対して利用しているものしか見つからなかったので、変更方法が見い出せないという表現を致しました。
何から何に変更するのかが分かりません……。
すべての返信
-
まずPriorityBindingに対する私の認識としては、FallbackValue含め文字列を返すことしかできないと思っています。
記述としては
---->
<PriorityBinding FallbackValue="Visible">
<Binding Path="VisiblityValue" Converter="{StaticResource ValueConverter}" />
</PriorityBinding>
<-----
上記のBindingの結果を
<Grid>
<Label Content="文字列" Visibility={・・・}"/> --- ①
</Grid>
①のVisibility=に設定したいのですが、方法が分かっておりません。(できればxamlのみの記述で)
動作としてはVisiblityValueがプロジェクト内で見つかれば(定義されていれば)、Visibility="Hidden"に、なければVisibility="Visible"になることを期待しております。
PriorityBindingサンプルは <TextBlock.Text>に対して利用しているものしか見つからなかったので、変更方法が見い出せないという表現を致しました。
- 編集済み tenpu 2014年1月31日 5:47
-
まずPriorityBindingに対する私の認識としては、FallbackValue含め文字列を返すことしかできないと思っています。
任意のオブジェクトを指定できます。列挙体なら{x:Static Visibility.Hidden}のようにx:Staticマークアップ拡張を使用できます。
あるいはリソースに定義しておいて{StaticResource ...}を使用することもできます。
<Binding><Binding.FallbackValue><Visibility>Hidden</Visibility</Binding.FallbackValue>のような指定も可能です。
まあバインディングターゲットがVisibility型なら、文字列で記述しても暗黙に型変換を試みるので、単にHidden等と書いても列挙体の場合は問題ないですが。
さて、XAMLの中身は検証していませんが、バインディングをXAMLで表現できているのなら
<Label Content="文字列"> <Label.Visibility> <PriorityBinding ...>
でいいんでは。
PriorityBindingサンプルは <TextBlock.Text>に対して利用しているものしか見つからなかったので、変更方法が見い出せないという表現を致しました。
何から何に変更するのかが分かりません……。