2011-05-05 70 views
0

我的目標是綁定到WPF中的一組對象。我第一次嘗試使用泛型,但可怕的是失敗了。由於我無法將通用屬性強制轉換爲INotifyProperty接口,因此請聯繫chan​​gedevent。WPF綁定列表元組

所以我想出了這個類作爲我的BindingList中的對象。 (是的,我需要那些在列表中的對象發生變化時通知我)。所以我需要你的意見,改進我的代碼。

public class GPair : ObservableObject 
{ 
    public GPair() 
    { 
    } 

    private ObservableObject _first; 
    public ObservableObject First 
    { 
     get 
     { 
      return this._first; 
     } 
     set 
     { 
      this._first = value; 
      ((ObservableObject)value).PropertyChanged +=new PropertyChangedEventHandler(First_PropertyChanged); 
      RaisePropertyChanged("First"); 
     } 
    } 
    private ObservableObject _second; 
    public ObservableObject Second 
    { 
     get 
     { 
      return this._second; 
     } 
     set 
     { 
      this._second = value; 
      ((ObservableObject)value).PropertyChanged += new PropertyChangedEventHandler(Second_PropertyChanged); 
      RaisePropertyChanged("Second"); 
     } 
    } 

    private void First_PropertyChanged(object sender, PropertyChangedEventArgs args) 
    { 
     RaisePropertyChanged("First"); 
    } 
    private void Second_PropertyChanged(object sender, PropertyChangedEventArgs args) 
    { 
     RaisePropertyChanged("Second"); 
    } 
} 

ObservableObject只是一個實現INotifyPropertyChanged的helper類。

這段代碼可以讓我夫妻兩個對象在綁定...綁定本身應該是這樣的:

<StackPanel Orientation="Horizontal"> 
    <TextBlock Text="{Binding Path=First.ObjectPropertie}" /> 
    <TextBlock Text="{Binding Path=Second.ObjectPropertie}" /> 
</StackPanel> 

任何意見或改進?

親切的問候!

回答

1

我不完全得到你所要實現的目標,但GPair類看起來很奇怪怎麼樣有這樣的事情

public class ObservablePair : INotifyPropertyChanged 
    { 
     public event PropertyChangedEventHandler PropertyChanged; 

     private MyObject m_First; 
     public MyObject First 
     { 
      get { return m_First; } 
      set 
      { 
       m_First = value; 
       OnPropertyChanged("First"); 
      } 

     } 

     private MyObject m_Second; 
     public MyObject Second 
     { 
      get { return m_Second; } 
      set 
      { 
       m_Second = value; 
       OnPropertyChanged("Second"); 
      } 
     } 

     public void OnPropertyChanged(string propertyName) 
     { 
       PropertyChangedEventHandler handler = PropertyChanged; 
       if (handler != null) handler(this, new 
        PropertyChangedEventArgs(propertyName)); ; 
     } 
} 

HTH

+0

比如,我從2個對象,我想在一個列表/ DataGrid中的/ etc顯示...任何控件,能夠顯示列表中得到的信息。但我只能將該控件的datacontext設置爲1個對象。所以我需要一種「元組」,但是實現了可變數據和INotifyPropertyChanged。你的代碼幾乎和我的一樣。只有PropertyChanged的東西在我繼承的ObservableObject類中。但看着你的迴應..它似乎我在一個很好的方式.. :)乾杯:) – 2011-05-05 12:46:40