数据绑定到multiBinding的值

时间:2010-07-22 12:53:24

标签: wpf xaml multibinding

也许我不太了解多重绑定。

我的viewmodel上有一个名为OfficeDisplayName的属性,该属性写入数据库。

这是一个基于人名Firstname,姓氏和办公地点的连接字段。

所以我在textBlock上有一个多绑定...没有biggie ...工作得很漂亮......但是如何将这个连接的完整值绑定到OfficeDisplayName属性?我是否必须有一个绑定到多重绑定文本框的隐藏元素?我已经看到了几个几乎我需要的例子,但只是不回答concat数据绑定问题。

1 个答案:

答案 0 :(得分:7)

一种方法是让文本块直接绑定到OfficeDisplayName,然后将连接逻辑放在viewmodel上的OfficeDisplayName属性中而不是MultiValueConverter中。因此,当其中一个属性FirstName,LastName或office位置发生更改时,您将触发PropertyChanged的{​​{1}}事件 - 即以下行中的某些内容。这样你根本不需要转换器:

OfficeDisplayName

另一种方法是将您的viewmodel本身作为参数传递给class YourViewModel : ViewModel { string _firstName; public string FirstName { get { return _firstName; } set { if (_firstName != value) { _firstName = value; OnPropertyChanged("FirstName"); OnPropertyChanged("OfficeDisplayName"); } } } // More properties here // ... public string OfficeDisplayName { get { return String.Join(" ", new string[] { _firstName, _lastName, _officeLocation}); } } } 。在您的转换器中,您可以直接设置MultiValueConverter的值。我认为这种方式有点“黑客”,但这是一个品味问题。您的代码如下所示:

XAML中的绑定:

OfficeDisplayName

转换器:

<MultiBinding Converter="{StaticResource theConverter}" Mode="OneWay">
    <Binding /> <!-- Pass the datacontext as the first parameter -->
    <Binding Path="FirstName" />
    <Binding Path="LastName" />
</MultiBinding>