我有一個對象Person
,它具有FirstName
和LastName
屬性。XAML綁定字符串連接
在我的WPF UI,我有一個Label
這需要綁定到全名:
<Label Binding="{Binding FullName}" />
我不想再創建一個只讀屬性,如:
public string FullName { get { return FirstName + " " + LastName; } }
我如何在XAML中連接這兩個屬性?
我有一個對象Person
,它具有FirstName
和LastName
屬性。XAML綁定字符串連接
在我的WPF UI,我有一個Label
這需要綁定到全名:
<Label Binding="{Binding FullName}" />
我不想再創建一個只讀屬性,如:
public string FullName { get { return FirstName + " " + LastName; } }
我如何在XAML中連接這兩個屬性?
幾個選項:
選項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
我愛MultiBinding AP馬特所描述的方法。但是,我還應該注意,根據創建FullName屬性的應用程序的體系結構,您不想創建的是同樣有效的(並且可以說是更理想的)選擇。
如果您使用的是Model-View-ViewModel,您將擁有一個ViewModel,它將公開一個FullName屬性,僅用於將其綁定到視圖。
例如,如果需求突然發生變化,您需要將其格式化爲First + Last或Last,First(取決於配置設置),ViewModel將更容易完成。同樣,使用直接的XAML方法編寫單元測試以驗證對FirstName或LastName的更改也會導致FullName中的適當更改。
但就像我說的一切取決於你的應用程序的體系結構。
我幾乎在我的文章中包含了關於在代碼隱藏(例如MVVM)中做的事情。所以+1。相互欽佩社會還是什麼? :) – 2010-01-05 05:10:24
我們正在使用MVVM模式。在這種情況下,在我的用戶界面我有一個DataGrid列FullName。這個DataGrid的ItemsSource是ObservableCollection of Persons。所以我不能在我的ViewModel中擁有FullName。謝謝回覆.. – Manohar 2010-01-05 05:16:39
+1用於MultiBinding。這是如此低估。 – Josh 2010-01-05 04:59:19
我將遵循選項1.感謝您的答覆。 – Manohar 2010-01-05 05:17:49
還有一件事Matt,如何在DatagridComboBoxColumn的情況下顯示全名。就像下面的XAML一樣。 SelectedItemBinding = 「{Binding Person}」SelectedValuePath =「ID」/> –
Manohar
2010-01-05 05:19:58