我有一个 object Person
,它有FirstName
和LastName
属性。
在我的 WPF UI 中,我有一个Label
需要绑定到全名:
<Label Binding="{Binding FullName}" />
我不想创建另一个只读属性,例如:
public string FullName { get { return FirstName + " " + LastName; } }
如何在 XAML 中连接这两个属性?
我有一个 object Person
,它有FirstName
和LastName
属性。
在我的 WPF UI 中,我有一个Label
需要绑定到全名:
<Label Binding="{Binding FullName}" />
我不想创建另一个只读属性,例如:
public string FullName { get { return FirstName + " " + LastName; } }
如何在 XAML 中连接这两个属性?
几个选项:
选项 1:带有 MultiBinding 的单个 TextBlock(或标签):
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="FirstName" />
<Binding Path="LastName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
选项 2:水平 StackPanel 中的多个文本块(或标签):
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}" />
<TextBlock Text=" " />
<TextBlock Text="{Binding LastName}" />
</StackPanel>
我个人会选择选项1。
我喜欢 Matt 描述的 MultiBinding 方法。但是,我还应该注意,根据应用程序的体系结构,创建您不想创建的 FullName 属性是同样有效的(并且可以说是更理想的)选择。
如果您使用的是 Model-View-ViewModel,您将拥有一个 ViewModel,它会公开一个 FullName 属性,其唯一目的是将其绑定到视图。
例如,如果需求突然发生变化,您需要能够将其格式化为 First + Last 或 Last, First,具体取决于配置设置,在 ViewModel 上执行会容易得多。同样,使用直接 XAML 方法编写单元测试来验证对 FirstName 或 LastName 的更改是否也会导致 FullName 的适当更改是不切实际的。
但就像我说的,这一切都取决于你的应用程序的架构。