DateTime的StringFormat不能与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",但它也不起作用。

我的代码有什么问题

您只有一个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);

希望您现在可以看到区别。

相关内容

  • 没有找到相关文章

最新更新