XAML绑定字符串连接

时间:2010-01-05 04:46:58

标签: xaml binding string-concatenation

我有一个对象Person,它具有FirstNameLastName属性。

在我的WPF UI中,我有Label需要绑定到全名:

<Label Binding="{Binding FullName}" />

我不想创建另一个只读属性,如:

public string FullName { get { return FirstName + " " + LastName; } }

如何在XAML中连接这两个属性?

2 个答案:

答案 0 :(得分:10)

有两种选择:

选项1:带有MultiBinding的单个TextBlock(或Label):

<TextBlock>
    <TextBlock.Text>
        <MultiBinding StringFormat="{}{0} {1}">
            <Binding Path="FirstName" />
            <Binding Path="LastName" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

选项2:水平StackPanel中的多个TextBlocks(或标签):

<StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding FirstName}" />
    <TextBlock Text=" " />
    <TextBlock Text="{Binding LastName}" />
</StackPanel>

就个人而言,我会选择选项1.

答案 1 :(得分:4)

我喜欢Matt描述的MultiBinding方法。但是,我还应该注意,根据应用程序的体系结构,创建您不想创建的FullName属性是一个同样有效(可以说是更理想的)选择。

如果您使用的是Model-View-ViewModel,那么您将拥有一个ViewModel,它将公开FullName属性,仅用于将其绑定到视图。

例如,如果需求突然改变,您需要能够将其格式化为First + Last或Last,First,具体取决于配置设置,它将更容易在ViewModel上执行。同样,使用直接XAML方法编写单元测试以验证对FirstName或LastName的更改是否也会导致FullName中的适当更改是不切实际的。

但就像我说的那样取决于你的应用程序的架构。