wpf - 数据绑定(bind)到 multiBinding 的值

标签 wpf xaml multibinding

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

我的 View 模型上有一个名为 OfficeDisplayName 的属性,该属性已写入数据库。

这是一个基于个人名字、姓氏和办公地点的串联字段。

所以我在 textBlock 上进行了多重绑定(bind)...没什么大不了的...效果很好...但是我如何将此串联的完整值绑定(bind)到 OfficeDisplayName 属性?我必须有一个绑定(bind)到多绑定(bind)文本框的隐藏元素吗?我看过几个几乎是我需要的示例,但只是不回答 concat 数据绑定(bind)问题。

最佳答案

一种方法是让文本 block 直接绑定(bind)到 OfficeDisplayName,然后将串联逻辑放在 View 模型的 OfficeDisplayName 属性中,而不是放在 MultiValueConverter。因此,当属性 FirstName、LastName 或办公室位置之一发生更改时,您将触发 OfficeDisplayNamePropertyChanged 事件 - 即以下几行。这样你就根本不需要转换器了:

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}); }
    }
}

另一种方法是将您的 View 模型本身作为参数传递给您的 MultiValueConverter。在您的转换器中,您可以直接设置 OfficeDisplayName 的值。我认为这种方式有点“hack-ish”,但这是一个品味问题。您的代码如下所示:

XAML 中的绑定(bind):

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

转换器:

class TheMultiValueConverter : IMultiValueConverter
{
    #region IMultiValueConverter Members

    public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        var viewModel = values[0] as TheViewModel;
        var ret = String.Join(" ", values.Skip(1).Cast<string>().ToArray());
        viewModel.OfficeDisplayName = ret;
        return ret;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

关于wpf - 数据绑定(bind)到 multiBinding 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3309001/

相关文章:

c# - 列表框中的列对齐

xaml - 在标签上设置触发器的 XAML 语法是什么?

c# - 如何从远程主机更新 exe - c# 4.0 - wpf 应用程序

c# - 列表框内元素的唯一名称

c# - 主窗口中的 float 窗口

c# - 在代码隐藏中使用 Multibinding.StringFormat

java - 是否可以使用 Guice 中的 Multibinder 根据应用程序配置构建动态集?

c# wpf Multibinding 不可用

c# - 为货币格式化文本框字符串

c# - 如何在 WPF 中使用一次性 View 模型?