多重绑定不更新源属性和数据库

本文关键字:属性 数据库 更新 绑定 | 更新日期: 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); }
}
当然,要做到这一点,您还需要具有名为FirstNameLastName的属性,这些属性的数据绑定到前两个TextBox e,但随后您假设无论如何都要这样做。在这种情况下,您还应该将这个聚合属性数据绑定到UI中的第三个TextBox.Text属性:
<TextBox Text="{Binding FullName}" />

请阅读MSDN上的数据绑定概述页面,以了解有关应该如何编写WPF代码的更多信息。

谢谢sheridanFullName实际上是姓和名的别名。例如:如果名字是Lionel,姓氏是Messi,多绑定全名=Lionel Messi,但有时我想将全名更改为自定义Nmae,例如:Lionel Messi to Lio

相关文章: