Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 绑定到属性不会更新相关属性_C#_Wpf_Entity Framework_Xaml_Binding - Fatal编程技术网

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

C# 绑定到属性不会更新相关属性,c#,wpf,entity-framework,xaml,binding,C#,Wpf,Entity Framework,Xaml,Binding,我在服务器端有一个类Person,带有一些属性,其中一个是PhoneNumber(这是edmx自动生成的-来自数据库)。在UI中,我有两个文本框,一个是前缀,另一个是后缀,因此我想扩展Person类,并使用另外两个属性将其部分化,prefix和postfix并在UI中将它们绑定到此属性,该属性将更新PhoneNumber属性,但不知何故,prefix和postfix有值,但PhoneNumber没有值 这是我的密码: 服务器端: Public partial class Person : Ent

我在服务器端有一个类
Person
,带有一些属性,其中一个是
PhoneNumber
(这是
edmx
自动生成的-来自数据库)。在
UI
中,我有两个
文本框
,一个是
前缀
,另一个是
后缀
,因此我想扩展
Person
类,并使用另外两个属性将其部分化,
prefix
postfix
并在UI中将它们绑定到此属性,该属性将更新
PhoneNumber
属性,但不知何故,prefix和postfix有值,但
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; }
    }
}

最终结果:

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; }
    }
}
在我将值添加到那些
文本框之后
我得到
前缀和
后缀中的值
,但是
电话号码仍然是
null
。调试模式下的打印屏幕:

我试图添加
更新资源记录器
或实现
INotifyPropertyChanged
但没有帮助,有人能帮我吗


提前谢谢

而不是PhoneNumber。子字符串(0,3)尝试以下操作:

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

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

您所说的
PhoneNumber
为null且
前缀
后缀
得到值是什么意思?如果
PhoneNumber
为空,则后缀和前缀将因空引用异常而崩溃,因为它们只是属性PhoneNumber的子字符串。@RohitVats我已添加了一个图像来回答您的问题。这也不会崩溃,可能setter和getter不工作?@Rohit Binding会捕获异常,如果您设置属性validate on exception,则绑定将在setter中验证TextBox on exception。从字面上讲,这种误解是不会被抛弃的scrope@Misha这部分代码在做什么:_PhoneNumber=StructuralObject.SetValidValue?可能您在那里返回null。@devhedgehog这是实体框架自动生成的,我刚刚复制了它。