多重绑定不更新源属性和数据库
本文关键字:属性 数据库 更新 绑定 | 更新日期: 2023-09-27 18:13:29
我在wpf和Entity框架下使用mvvm模式并在viewmodel和model中实现了INotifyPropertyChanged
我使用多重绑定与3个文本框控件,输入名字的第一个文本框设置姓
的文本框第三个文本框为全名
使用multibinding的第三个文本框:
<TextBox >
<TextBox.Text>
<MultiBinding Converter="{StaticResource FullNameConverter}">
<Binding Path="PersonData.FullName" Mode="TwoWay" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged"/>
<Binding ElementName="FirstNameTextBox" Path="Text" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" />
<Binding ElementName="LastNameTextBox" Path="Text" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
这是我的转换器
public class FullNameConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
return string.Format("{0} {1}", values[1], values[2]);
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
return new[] { value };
}
}
这个工作完美,并保存FirstName和LastName到数据库
但是当直接在FullName文本框中输入时将数据保存到数据库
如何解决这个问题?请帮帮我由于
MultiBinding
并不像你想象的那样起作用。不能使用它来创建要保存在数据库中的新值。它们只能用于创建一个新值,以便在UI中显示。如果你想创建一个新值保存在数据库中,那么你需要在代码中为它创建属性…也许是这样的?:
public string Fullname
{
get { return string.Format("{0} {1}", FirstName, LastName); }
}
当然,要做到这一点,您还需要具有名为FirstName
和LastName
的属性,这些属性的数据绑定到前两个TextBox
e,但随后您假设无论如何都要这样做。在这种情况下,您还应该将这个聚合属性数据绑定到UI中的第三个TextBox.Text
属性:
<TextBox Text="{Binding FullName}" />
请阅读MSDN上的数据绑定概述页面,以了解有关应该如何编写WPF代码的更多信息。
谢谢sheridanFullName实际上是姓和名的别名。例如:如果名字是Lionel,姓氏是Messi,多绑定全名=Lionel Messi,但有时我想将全名更改为自定义Nmae,例如:Lionel Messi to Lio