我尝试从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中)。
答案 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); }
}