2010-10-25 108 views
1

ys, 我需要帮助了解为什么不更新字段: 我有两个派生自Observable的样本类,它们只是实现INotifyPropertyChanged。将TextBlock绑定到复杂属性

public class ClassA : Observable 
    { 
     string p1; 
     public string Property1 
     { 
      get { return p1; } 
      set 
      { 
       p1 = value; 
       RaisePropertyChangedEvent("Property1"); 
      } 
     } 

     ClassB p2; 
     public ClassB Property2 
     { 
      get { return p2; } 
      set 
      { 
       if (p2 != null) 
        p2.PropertyChanged -= OnProperty2Changed; 

       p2 = value; 

       if (p2 != null) 
        p2.PropertyChanged += OnProperty2Changed; 
      } 
     } 

     string p2r; 
     public string Propert2Representation 
     { 
      get { return p2r; } 
      set 
      { 
       p2r = value; 
       RaisePropertyChangedEvent("Propert2Representation"); 
      } 
     } 

     void OnProperty2Changed(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
     { 
      this.RaisePropertyChangedEvent("Property2"); 
      this.Propert2Representation = Property2.ToString(); 
     } 

     public override string ToString() 
     { 
      return "Class A"; 
     } 
    } 

    public class ClassB : Observable 
    { 
     public int Property1 { get; set; } 
     public override string ToString() 
     { 
      return "Class B"; 
     } 
    } 

当我在ClassB中更改属性时,绑定到Property2的TextBlock不会更新。但是,绑定到Property2Representation的TextBlock已更新。我究竟做错了什么?

TIA。

回答

0

ClassB不提出财产变更通知!

+0

对不起,我的不好,但是ClassB确实在Property1上引发了属性更改通知。我不知何故忘了补充一点。 – 2010-10-26 01:56:50

+0

您是否将Property2绑定为源或路径,如果绑定为源,那么它将不起作用,因为更新Property2的时刻您正在更改其引用。 – whoisthis 2010-10-26 03:49:37

+0

尝试绑定到路径,但没有这样做。与此同时,我只是简单地创建了另一个字符串属性,将属性更改为从那里获取更新。 – 2010-10-27 20:56:28

相关问题