我有一个对象Person
,它具有FirstName
和LastName
属性。
在我的WPF UI中,我有Label
需要绑定到全名:
<Label Binding="{Binding FullName}" />
我不想创建另一个只读属性,如:
public string FullName { get { return FirstName + " " + LastName; } }
如何在XAML中连接这两个属性?
答案 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中的适当更改是不切实际的。
但就像我说的那样取决于你的应用程序的架构。