2013-03-06 71 views
0

我有一個類包含兩個其他對象。NotifyPropertyChanged通過代碼

第一個對象中的變量綁定到WPF元素,將其稱爲X

另一個對象中的類似變量。

我希望當發生PropertyChanged事件時,它會改變第二個對象中的變量。

這裏是不爲我工作的代碼:

包含變量的類:(我不得不註冊屬性更改事件)

private Class1 _var1; 
    public Class1 Var1 
    { 
     get { return _var1; } 
     set 
     { 
      _var1= value; 
      if (_var1!= null) 
       _var1.PropertyChanged += new PropertyChangedEventHandler(_var1_PropertyChanged); 
      else 
       _var1.PropertyChanged -= new PropertyChangedEventHandler(_var1_PropertyChanged); 
     } 
    } 

    void _var1_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     if(e.PropertyName=="X") 
     Var2.X= Var1.X; 
    } 

    private Class2 _var2; 
    public Class2 Var2 
    { 
     get { return _var2; } 
     set { _var2= value; } 
    } 

第1類:

private int _x; 
    public int X 
    { 
     get { return _x; } 
     set 
     { 
      if (_x!= value) 
      { 
       _x= value; 
       NotifyPropertyChanged("X"); 
      } 
     } 
    } 

第2類:

​​

PropertyChanged在班級1工作,但他沒有來到我在包含兩個變量的類中創建的事件,爲什麼?

回答

0

我不知道我明白你的意思到底是什麼,但如果我有一類具有2個變量,我想改變,我總是嘗試以下方法:
首先,定義一些SetAndNotify方法,否則會從PropertyChanged事件感到頭痛:

public void SetAndNotify<T>(ref T field, T value, Expression<Func<T>> exp) 
{ 
    if (!Equals(field, value)) 
    { 
     field = value; 
     OnPropertyChanged(exp); 
    } 
} 

將它添加到一些基類將處理這個事件。

其次,在你的二傳手Var1你註冊的變化事件,並沒有設置任何東西,是故意的?

第三次和最後一次,有一個與在二傳手改變不止一個屬性沒有問題,但要確保它是你改變了公共財產:

private SomeType privateVar1; 
public SomeType PublicVar1 
{ 
    get { return privateVar1; } 
    set 
    { 
     SetAndNotify(ref privateVar1, value,() => PublicVar1); 
     MyOtherPublicVar = someNewValue; // this will activate the property's setter.  
    } 
} 

我希望這有助於。如果不是,請嘗試澄清您的問題。