2012-08-07 40 views
9

我想在我的窗口標題中連接我的viewmodel的屬性和來自資源文件的值。 這是我沒有從資源的字符串工作:Stringformat連接數據綁定和資源的值

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

現在我想刪除了「大廈」的字符串,並從資源投入價值就像我在其他地方使用:

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

如何定義兩者?我可以像{1}參數那樣定義嗎?

回答

15

是的,你可以。只需使用MultiBinding即可。

關於StringFormat的MSDN文章有一個示例。

在你的情況下,代碼會是這個樣子:

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

多重綁定到靜態資源?從來沒有聽說過:S – Louro 2012-08-07 18:42:56

+0

那麼我可能誤解了,你說的「靜態資源」是什麼意思?它是一個類的靜態屬性嗎?如果是這樣,我相信支持綁定這些是.NET 4.5中的新功能。 – madd0 2012-08-07 18:47:38

+0

我更新了這個問題。我想使用我的.resx資源中的值。我不認爲我可以通過綁定來做到這一點... – Louro 2012-08-07 18:53:06

7

我見過好幾個地方MultiBinding答案,現在,它幾乎從來沒有必要使用它。您可以將資源定義爲字符串格式,只要只有一個字符串格式參數,則不需要MultiBinding。使代碼更大量簡潔:

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

而且TitleDesc資源顯然是"Building: {0}"

+0

Upvote for this answer。比使用MultiBindings更簡單 – 2016-06-20 05:53:46

+1

謝謝我犯了一個錯誤,就是用{}'在資源中添加字符串的前綴。另外我想要'\\ Path \ {0}'這樣的東西,所以我最終放入.resx文件中'\\\\路徑\\ {0}' - 需要避開反斜槓 – stambikk 2017-10-05 22:10:08