gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:54:24 25 4
gpt4 key购买 nike

也许我不太了解多重绑定(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com