我有一个对象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