DateTime的StringFormat不适用于MultiBinding

时间:2014-08-19 14:04:05

标签: c# .net wpf multibinding

我有这段代码:

<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",但它也没有用。

我的代码有什么问题?

1 个答案:

答案 0 :(得分:5)

您只有一个Binding Path,因此您只能获得日期和时间。基本上,您需要为个人数据类型添加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>

请注意,您还可以使用DateTime StringFormat属性设置MultiBinding.StringFormat,而不是在第一个Binding对象上添加另一个属性。您还需要将{1}添加到MultiBinding.StringFormat的末尾,以便输出第二个(人员相关)值。

有关详细信息,请参阅MSDN上的MultiBinding Class页面。


更新&gt;&gt;&gt;

  

我不明白为什么在MultiBinding元素上放置StringFormat属性与第一个元素相比具有不同的行为

它没有...我可以把它留在那里,但是因为你已经使用StringFormat而移动了它。在StringFormat上使用MultiBinding属性与使用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);

希望您现在可以看到差异。