使用StringFormat的MultiBind字符串资源

时间:2014-08-06 12:17:12

标签: c# wpf multibinding staticresource

我尝试从TextBlock中的本地化资源中多重绑定formattable字符串。

字符串如下所示: This record is locked for edit by {0}.

现在我想将它绑定到TextBlock:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0}">
            <Binding Source="{x:Static res:LocalizedResources.EntityLockedMessageTitleFormat}" />
            <Binding Path="Entity.LockedBy" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

但不幸的是,这只显示了实际的字符串(包含{0})。

我怎样才能多重绑定?最理想的是不使用转换器(纯粹在XAML中)。

1 个答案:

答案 0 :(得分:1)

想想最初的{}StringFormat的开头。然后可以使用下一个连续索引访问每个Binding值。试试这个:

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} {1}.">
            <Binding Source="{x:Static res:LocalizedResources.EntityLockedMessageTitleFormat}" />
            <Binding Path="Entity.LockedBy" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

当对.NET类或函数感到困惑时,通常最好转到MSDN,在那里通常可以找到详细的解释和代码示例。有关使用MultiBinding的详细信息,请参阅MSDN上的MultiBinding Class页面。


更新&gt;&gt;&gt;

您无法在XAML中使用string之类的Entity {0} is locked by {1} since {2}.作为格式string。相反,您可以做的是格式化代码中的string并将结果公开为您可以在UI中进行数据绑定的属性。尝试这样的事情:

public string FormattedString
{
    get { return string.Format(YourEntityLockedMessageTitleFormat, Val1, Val2, Val3); }
}