标签内容绑定
比方说,我有一个资源密钥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文件。
我刚刚解决了为什么你会得到这个错误。这是因为您无法参考该MultiBinding
的Path
属性中的资源string
。
我想,也许你也来试试这样的事情:
<MultiBinding StringFormat="{}{0}: {1}">
<Binding Path="GroupBoxHeaderCaption" Source="{x:Static my:MyResources}" />
<Binding Path="viewModel.Description" />
</MultiBinding>
不幸的是,我现在不能尝试了这一点,我不知道这是否是正确的语法,所以请回来并让我知道你是否还有其他问题。
还没有尝试过,但从它的外观来看,在资源文件中引用字符串*属性*,而不是直接指向*字符串*本身,这看起来很有用。 –
...不幸的是'Source =“{x:Static my:MyResources}”'失败,说“StaticExtension必须指定一个成员。”... –
是的,这很有道理......好吧,一个属性给你的视图模型,并从代码中的资源中设置它的值,然后用属性设置'Binding'? – Sheridan
您是否在Visual Studio的资源设计器窗口中将'Access Modifier'属性设置为'Public',例如:使您的资源可公开访问? – Sheridan
是的,绝对 - 我在XAML的其他地方使用这个资源文件没有任何问题,它只是我想结合资源字符串与视图模型属性,我想知道如果绑定StringFormat可以做到这一点。它看起来像它不会工作*字符串*,它需要一个字符串*属性* ... –
这就像在这些例子中,他们给了像'StringFormat =“{} Cost:{0}”' - - 好我希望从“.resx”文件中提取“Cost:”部分。 –