XAML绑定字符串连接

XAML绑定字符串连接,xaml,binding,string-concatenation,Xaml,Binding,String Concatenation,我有一个对象Person,它有FirstName和LastName属性 在我的WPF UI中,我有一个标签,需要绑定到全名: <Label Binding="{Binding FullName}" /> 如何在XAML中连接这两个属性?有几个选项: 选项1:具有多重绑定的单个文本块(或标签): <TextBlock> <TextBlock.Text> <MultiBinding StringFormat="{}{0} {1}"&

我有一个对象
Person
,它有
FirstName
LastName
属性

在我的WPF UI中,我有一个
标签
,需要绑定到全名:

<Label Binding="{Binding FullName}" />
如何在XAML中连接这两个属性?

有几个选项:

选项1:具有多重绑定的单个文本块(或标签):

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

选项2:水平堆叠面板中的多个文本块(或标签):

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


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

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

如果您使用的是模型-视图-视图-模型,那么您将拥有一个ViewModel,该ViewModel将公开一个全名属性,其唯一目的是将其绑定到视图

例如,如果需求突然发生变化,您需要能够将其格式化为First+Last或Last,那么首先根据配置设置,在ViewModel上执行此操作会容易得多。同样,使用直接的XAML方法编写单元测试来验证对FirstName或LastName的更改是否也会导致对FullName的适当更改是不切实际的


但正如我所说的,这一切都取决于应用程序的体系结构。

我几乎在我的帖子中包含了一些关于在代码隐藏(如MVVM)中实现的内容。所以这是+1。相互倾慕的社会还是什么?:)我们正在使用MVVM模式。在本例中,在我的UI上有一个列为FullName的DataGrid。此数据网格的ItemsSource是可观察的人员集合。因此,我的ViewModel中不能真正有全名。谢谢你的回复。我将遵循选项1。谢谢你的回答。还有一件事,Matt,如果是DataGridComboxColumn,我如何显示全名。就像下面的XAML一样。我根本没有玩过DataGrid,所以我不能给你一个好的答案。您将无法使用DisplayMemberPath执行此操作,但如果DataGrid中有ItemTemplate或等效项,您可能可以执行此操作。
<StackPanel Orientation="Horizontal">
    <TextBlock Text="{Binding FirstName}" />
    <TextBlock Text=" " />
    <TextBlock Text="{Binding LastName}" />
</StackPanel>