2010-01-05 35 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