我正在尝试在TextBlock中从本地化资源中多绑定可格式化的字符串。
字符串如下所示: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中)。
想象初始的{}
是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
s的更多信息,请参阅MSDN上的多绑定类页面。
更新>>>
在XAML中不能使用string
(如Entity {0} is locked by {1} since {2}.
)作为string
格式。相反,您可以做的是在代码中格式化string
,并将结果公开为可以在UI中进行数据绑定的属性。试试这样做:
public string FormattedString
{
get { return string.Format(YourEntityLockedMessageTitleFormat, Val1, Val2, Val3); }
}