2011-05-05 118 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