我使用mvvm模式与wpf和Entity框架 并在viewmodel和model
中实现了INotifyPropertyChanged我正在使用带有3个文本框控件的Multibinding, 第一个输入名字的文本框 用于姓氏的secend文本框
和全名的第三个文本框
使用多重绑定的第三个文本框:
<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保存到具有多绑定的数据库。
但直接在FullName TextBox中输入将数据保存到数据库
如何解决这个问题? 请帮我 感谢
答案 0 :(得分:2)
MultiBinding
不能像你认为的那样工作。您不能使用一个来创建新值以保存在数据库中。它们只能用于为UI中的显示创建新值。如果你想创建一个新值来保存在数据库中,那么你需要在代码中为它创建属性......也许是这样的?:
public string Fullname
{
get { return string.Format("{0} {1}", FirstName, LastName); }
}
当然,要做到这一点,您还需要拥有名为FirstName
和LastName
的属性,这些属性是绑定到前两个TextBox
es的数据,但是您需要这样做。无论如何,假设正在做这件事。在这种情况下,您还应该将此聚合属性数据绑定到UI中的第三个TextBox.Text
属性:
<TextBox Text="{Binding FullName}" />
请阅读MSDN上的Data Binding Overview页面,详细了解应编写WPF代码的方式。
答案 1 :(得分:0)