2014-02-15 39 views
0

我在服务器端类Person与一些属性,其中之一是PhoneNumber(这是edmx自动生成 - 从数据库)。在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我得到的值PrefixPostfixPhoneNumber仍然null。在调试模式下打印屏幕:

enter image description here

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

在此先感谢!

+0

你说的意思'PhoneNumber'为空和'前缀','PostFix'获得值?如果'PhoneNumber'为空,postFix和前缀将会以空引用异常崩溃,因为它们只是属性PhoneNumber的子字符串。 –

+0

@RohitVats我添加了一个图像回答你的问题。这也不会崩溃,也许setter和getter不起作用? –

+0

@Rohit绑定排序捕获异常,如果您设置属性验证异常,Binding将验证setter中异常的TextBox。这种感觉绝对不会被字面意义地抛出来。 –

回答

0

相反PhoneNumber.Substring的(0,3)尝试这个办法:

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

或手动问(******中国!= NULL)...