绑定到属性不会更新相关属性

时间:2014-02-15 19:21:00

标签: c# wpf entity-framework xaml binding

我在服务器端类Person上有一些属性,其中一个是PhoneNumber(这是edmx自动生成的 - 来自DB)。在UI我有2个textboxes,其中一个是prefix,另一个是postfix,所以我想扩展Person类并使其偏向还有2个属性prefixpostfix,并在UI中将它们绑定到此属性,这将更新PhoneNumber属性,但不知何故,前缀和后缀具有值但PhoneNumber确实有效不

这是我的代码:

服务器端:

Public partial class Person : EntityObject
{
    //Auto generated from edmx
    ...
    ...
    /// <summary>
    /// No Metadata Documentation available.
    /// </summary>
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
    [DataMemberAttribute()]
    public global::System.String PhoneNumber
    {
        get
        {
            return _PhoneNumber;
        }
        set
        {
            OnPhoneNumberChanging(value);
            ReportPropertyChanging("PhoneNumber");
            _PhoneNumber = StructuralObject.SetValidValue(value, true, "PhoneNumber");
            ReportPropertyChanged("PhoneNumber");
            OnPhoneNumberChanged();
        }
    }
}

public partial class Person
{
    [DataMember]
    public string PhoneNumberPrefix
    {
        get { return PhoneNumber.Substring(0, 3); }
        set { PhoneNumber = value + PhoneNumber.Substring(3); }
    }

    [DataMember]
    public string PhoneNumberPostfix
    {
        get { return PhoneNumber.Substring(3); }
        set { PhoneNumber = PhoneNumber.Substring(0, 3) + value; }
    }
}

客户端:

DataContextPerson

<TextBox Grid.Column="0" MaxLength="3"
                         Text="{Binding PhoneNumberPrefix, Mode=TwoWay}" />
<TextBlock Grid.Column="1" Text="-" />
<TextBox Grid.Column="2"
         Text="{Binding PhoneNumberPostfix, Mode=TwoWay}" />

enter image description here

最终结果:

textboxes添加值后,我会在PrefixPostfix中获得值,但PhoneNumber仍为null。在调试模式下打印屏幕:

enter image description here

我尝试添加UpdateSourceTrigger或实施INotifyPropertyChanged但没有任何帮助,有人可以帮助我吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

而不是PhoneNumber.Substring(0,3)尝试这个:

PhoneNumber != null ? PhoneNumber.Substring(0, 3) : string.Empty;

或者手动询问(PhoneNumber!= null)...