2010-01-05 70 views
4

我有一个对象Person,它具有FirstNameLastName属性。XAML绑定字符串连接

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

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

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

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

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

回答

10

几个选项:

选项1:单的TextBlock(或标签)与MultiBinding:

<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

+2

+1用于MultiBinding。这是如此低估。 – Josh 2010-01-05 04:59:19

+0

我将遵循选项1.感谢您的答复。 – Manohar 2010-01-05 05:17:49

+0

还有一件事Matt,如何在DatagridComboBoxColumn的情况下显示全名。就像下面的XAML一样。 SelectedItemBinding = “{Binding Person}”SelectedValuePath =“ID”/> – Manohar 2010-01-05 05:19:58

4

我爱MultiBinding AP马特所描述的方法。但是,我还应该注意,根据创建FullName属性的应用程序的体系结构,您不想创建的是同样有效的(并且可以说是更理想的)选择。

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

例如,如果需求突然发生变化,您需要将其格式化为First + Last或Last,First(取决于配置设置),ViewModel将更容易完成。同样,使用直接的XAML方法编写单元测试以验证对FirstName或LastName的更改也会导致FullName中的适当更改。

但就像我说的一切取决于你的应用程序的体系结构。

+0

我几乎在我的文章中包含了关于在代码隐藏(例如MVVM)中做的事情。所以+1。相互钦佩社会还是什么? :) – 2010-01-05 05:10:24

+0

我们正在使用MVVM模式。在这种情况下,在我的用户界面我有一个DataGrid列FullName。这个DataGrid的ItemsSource是ObservableCollection of Persons。所以我不能在我的ViewModel中拥有FullName。谢谢回复.. – Manohar 2010-01-05 05:16:39