标签内容绑定

问题描述:

比方说,我有一个资源密钥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:”部分。 –

我刚刚解决了为什么你会得到这个错误。这是因为您无法参考该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