9

私のウィンドウのタイトルには、私のviewmodelからのプロパティとリソースファイルからの値を連結したいと思います。 これは私がリソースから文字列をせずに作業してきたものである:Stringformatはデータバインディングとリソースの値を連結します

Title="Binding Path=Description, StringFormat=Building: {0}}" 

は今、私は「ビル」の文字列を削除して、私は他の場所で使うようにリソースから値を入れたい:

xmlns:res="clr-namespace:Project.View.Resources" 
{res:Strings.TitleDescription} 

どうすれば両方を定義できますか? {1}パラメータのように定義できますか?

答えて

15

はい、できます。単にMultiBindingを使用してください。

MSDN記事StringFormatには例があります。あなたのケースでは

は、コードは次のようになります。

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0} {1}"> 
     <Binding Source="{x:Static res:Strings.TitleDescription}"/> 
     <Binding Path="Description"/> 
     </MultiBinding> 
    </TextBlock.Text> 
    </TextBlock> 
+0

静的リソースへのマルチバインド?それを聞いたことがない:S – Louro

+0

「静的リソース」とはどういう意味ですか?それはクラスの静的なプロパティですか?その場合、これらのバインドのサポートは.NET 4.5の新機能です。 – madd0

+0

私は質問を更新しました。 .resxリソースの値を使用したい。私はバインドでそれを行うことはできないと思っています... – Louro

7

を私は今、いくつかの場所でMultiBinding答えを見てきた、そしてそれを使用する必要がなることはほとんどありません。代わりに文字列形式としてリソースを定義できます。文字列形式引数が1つのみである限り、MultiBindingは必要ありません。多くの簡潔なコードになり:

<TextBlock Text="{Binding Description, StringFormat={x:Static res:Strings.TitleDesc}}" /> 

をそしてTitleDescリソースは明らかに"Building: {0}"です。

+0

MultiBindingsを使用するよりもずっと簡単です –

+1

リソースの文字列に '{} 'を付ける間違いをしていました。また、' \\ Path \ {0} 'のようなものが欲しかったので、.resxファイルに入れたのは'\\\\ Path \\ {0}' - バックスラッシュをエスケープするために必要 – stambikk

関連する問題