字符串格式化将数据绑定和资源值连接起来。

17

我想在窗口标题中连接来自我的视图模型的属性和来自资源文件的值。 这是我在没有来自资源的字符串的情况下可以工作的代码:

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

现在我想删除 "Building" 字符串,并从资源中获取一个值,就像我在其他地方使用的一样:

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

我如何同时定义两个参数?可以像{1}参数一样定义吗?

2个回答

28

我现在已经在很多地方看到了MultiBinding的解决方案,但实际上它几乎从来不是必须的。相反,你可以将资源定义为字符串格式,只要只有一个字符串格式参数,就不需要使用MultiBinding。这样代码会更加简洁:

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

TitleDesc 资源显然是 "Building: {0}"


点赞这个答案。比使用MultiBindings简单得多。 - Florian Berger
1
谢谢,我之前犯了一个错误,把资源中的字符串用“{}”作为前缀。同时,我想要类似于“\Path{0}”这样的格式,所以我在.resx文件中输入的是“\\Path\{0}”,需要对反斜杠进行转义。 - stambikk
正是我在寻找的内容。您还可以将资源添加为FallbackValue,以便在设计师中显示。 - martinyyyy

25

可以,只需使用MultiBinding即可。

StringFormat的MSDN文章中有一个示例。

在您的情况下,代码应该类似于:

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

多绑定到静态资源?从未听说过 :S - Louro
我可能误解了,你所说的“静态资源”是什么意思?它是类的静态属性吗?如果是这样,我相信在.NET 4.5中支持绑定它们是新的。 - madd0
我更新了问题。我想使用我的.resx资源中的一个值。我认为我不能使用绑定来实现这一点... - Louro
我修改了Rachel添加的示例,以展示在您的情况下代码的样子。 - madd0
请为“res”包含xmlns,我不确定它应该是什么样子。 - Scott Solmer
@Okuma.Scott 它指向你的资源类型所在的命名空间,类似于 xmlns:res="clr-namespace:MyApp.Properties"。另外,请确保你的资源访问修饰符设置为 public,否则 WPF 将无法看到它。 - madd0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接