2009-06-18 10 views
5

私はMultiBindingのは、StringFormatで動作するように取得することができます。シングルバインディングでStringFormatを使用する正しい構文は何ですか?

<TextBlock.Text> 
    <MultiBinding StringFormat="{}{0} {1} (hired on {2:MMM dd, yyyy})"> 
     <Binding Path="FirstName"/> 
     <Binding Path="LastName"/> 
     <Binding Path="HireDate"/> 
    </MultiBinding> 
</TextBlock.Text> 

しかし、単一の結合のための正しい構文は何ですか?this exampleと同じ構文のようですが)動作しません、次

<TextBlock Text="{Binding Path=HiredDate, StringFormat='{MMM dd, yyyy}'}"/> 

ANSWER:

おかげマット、私が必要なことは、これは素晴らしい作品、あなたの2つの答えの組み合わせでした:

<TextBlock Text="{Binding Path=HiredDate, 
    StringFormat='Hired on {0:MMM dd, yyyy}'}"/> 

答えて

10

あなたが使用したいようにあなたが(プレースホルダとしてそれらを使用していないので、あなたの例では、フォーマット文字列のうち、中括弧を残したい「{0}」String.Formatの中に( ))。だから、

:あなたは、文字列内のどこかにプレースホルダ値を参照したい場合は

<TextBlock Text="{Binding Path=HiredDate, StringFormat='MMM dd, yyyy'}"/> 

、あなたはバックスラッシュで中括弧をエスケープすることにより、そうすることができます。

<TextBlock Text="{Binding Path=HiredDate, StringFormat='Hired on \{0\}'}"/> 
+1

あなたは考えていません2番目の例ではバックスラッシュが必要ですが、バックスラッシュがなければ動作しますが、それ以外の理由でそこに存在します。 –

+0

奇妙な。バックスラッシュを省略したとき、私は過去にコンパイルエラーが発生しました。それはあなたのために働くことがうれしい! –

+0

文字列が '{0} Some Text'のような中括弧で始まる場合、中括弧をエスケープする必要があることがわかりました。スペースのような他の文字が最初に来ると、それらをエスケープする必要はありません。 – Tod

関連する問題