2013-10-28 115 views
0

比方說,我有一個資源密鑰GroupBoxHeaderCaption和值「SomeString」.resx文件。我有string屬性Description標籤內容綁定

我想實現的是這個(給.resx文件與using resx = [...]稱爲並且以視圖模型被稱爲viewModel):

string.Format("{0}: {1}", resx.GroupBoxHeaderCaption, viewModel.Description) 

是否有可能做到這一點在XAML?我得到了這一點,但它不工作:

<GroupBox Margin="4"> 
     <GroupBox.HeaderTemplate> 
      <DataTemplate> 
       <Label> 
        <Label.Content> 
         <MultiBinding StringFormat="{}{0}: {1}"> 
          <Binding Path="{x:Static my:MyResources.GroupBoxHeaderCaption}" /> 
          <Binding Path="viewModel.Description" /> 
         </MultiBinding> 
        </Label.Content> 
       </Label> 
      </DataTemplate> 
     </GroupBox.HeaderTemplate> 

通過不工作我的意思是,我得到GroupBoxHeaderCaption紅色下劃線與一個錯誤,指出:

無效會員類型:預測的類型是「 PropertyPath',實際類型是'string'。

我知道我可以寫一個轉換器,用於我的viewModel.Description,但有一種方法可以做到這一切,XAML?


我得到期望的結果當我這樣做:

<GroupBox Margin="4" Header="{Binding viewModel.Description}" 
        HeaderStringFormat="SomeString: {0}"> 

我想取 「SomeString:」 部分從.resx文件。

+0

您是否在Visual Studio的資源設計器窗口中將'Access Modifier'屬性設置爲'Public',例如:使您的資源可公開訪問? – Sheridan

+0

是的,絕對 - 我在XAML的其他地方使用這個資源文件沒有任何問題,它只是我想結合資源字符串與視圖模型屬性,我想知道如果綁定StringFormat可以做到這一點。它看起來像它不會工作*字符串*,它需要一個字符串*屬性* ... –

+0

這就像在這些例子中,他們給了像'StringFormat =「{} Cost:{0}」' - - 好我希望從「.resx」文件中提取「Cost:」部分。 –

回答

2

我剛剛解決了爲什麼你會得到這個錯誤。這是因爲您無法參考該MultiBindingPath屬性中的資源string

我想,也許你也來試試這樣的事情:

<MultiBinding StringFormat="{}{0}: {1}"> 
    <Binding Path="GroupBoxHeaderCaption" Source="{x:Static my:MyResources}" /> 
    <Binding Path="viewModel.Description" /> 
</MultiBinding> 

不幸的是,我現在不能嘗試了這一點,我不知道這是否是正確的語法,所以請回來並讓我知道你是否還有其他問題。

+0

還沒有嘗試過,但從它的外觀來看,在資源文件中引用字符串*屬性*,而不是直接指向*字符串*本身,這看起來很有用。 –

+0

...不幸的是'Source =「{x:Static my:MyResources}」'失敗,說「StaticExtension必須指定一個成員。」... –

+1

是的,這很有道理......好吧,一個屬性給你的視圖模型,並從代碼中的資源中設置它的值,然後用屬性設置'Binding'? – Sheridan