multibinding不更新源属性和数据库

时间:2014-07-17 09:41:47

标签: c# wpf mvvm

我使用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中输入将数据保存到数据库

如何解决这个问题? 请帮我 感谢

2 个答案:

答案 0 :(得分:2)

MultiBinding不能像你认为的那样工作。您不能使用一个来创建新值以保存在数据库中。它们只能用于为UI中的显示创建新值。如果你想创建一个新值来保存在数据库中,那么你需要在代码中为它创建属性......也许是这样的?:

public string Fullname
{
    get { return string.Format("{0} {1}", FirstName, LastName); }
}

当然,要做到这一点,您还需要拥有名为FirstNameLastName的属性,这些属性是绑定到前两个TextBox es的数据,但是您需要这样做。无论如何,假设正在做这件事。在这种情况下,您还应该将此聚合属性数据绑定到UI中的第三个TextBox.Text属性:

<TextBox Text="{Binding FullName}" />

请阅读MSDN上的Data Binding Overview页面,详细了解编写WPF代码的方式。

答案 1 :(得分:0)

谢谢sheridan FullName Infact是名字和姓氏的别名。 示例:如果名字是Lionel而LastName是Messi,Multibinding Full Name = Lionel Messi但有时我想要将全名更改为Custom Nmae,例如:Lionel Messi To Lio