我有这样的代码:
<Label>
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{} created on {0} by">
<Binding Path="CreationDate" StringFormat="{}{0:dd/MM/yyyy}" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</LabeledLabel.Content>
</Label>
OUTPUT
created on 21/09/2014 00:00:00 by
我试过StringFormat="d"
,但它也不起作用。
我的代码有什么问题
您只有一个Binding Path
,因此您只能获得日期和时间。基本上,您需要为您的person数据类型添加Binding
元素。它应该更像这样:
<Label>
<Label.Content>
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{} created on {0:dd/MM/yyyy} by {1}">
<Binding Path="CreationDate" />
<Binding Path="SomeEmployeeObject.Name" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</LabeledLabel.Content>
</Label>
注意,您也可以使用MultiBinding.StringFormat
属性来设置DateTime StringFormat
,而不是在第一个Binding
对象上添加另一个。您还需要将{1}
添加到MultiBinding.StringFormat
的末尾,以便它将输出第二个(与人相关的)值。
有关更多信息,请参阅MSDN上的MultiBinding类页面。
更新>>>
我不明白为什么将StringFormat属性放在MultiBinding元素上与第一个元素
相比有不同的行为
不…我可以把它留在那里,但我把它移走了,因为你已经在用StringFormat
了。在MultiBinding
上使用StringFormat
属性实际上与使用string.Format
方法相同。使用该方法,这相当于XAML:
string.Format("created on {0:dd/MM/yyyy} by ", someDate);
这相当于XAML:
string.Format("created on {0:dd/MM/yyyy} by {1}", someDate, someEmployee.Name);
希望您现在可以看到区别。