2011-11-08 3 views
1

다른 클래스의 데이터를 사용하는 ComboBox가 있습니다.데이터 바인딩 및 INotifyPropertyChanged

public partial class MainWindow : Window 
{ 
     private ObservableCollection<MyDataClass> _myList = new ObservableCollection<MyDataClass>(); 

     public MainWindow() 
     { 
      InitializeComponent(); 
      comboBox1.DataContext = _myList; 
     } 

     private void Button_Click(object sender, EventArgs e) 
     { 
      _myList = AnotherClass.SomeMethod(); 
     } 
} 

단추 클릭 후 ComboBox 데이터를 업데이트하는 유일한 방법은 MyDataClass에서 INotifyPropertyChanged 인터페이스를 구현하는 것입니다. 그렇지 않으면 다른 방법이 있습니까? MyDataClass는 웹 서비스에서 생성되므로 INotifyPropertyChanged

을 구현하려면 일부 어댑터 클래스를 만들어야하기 때문에 다른 방법을 찾는다.

답변

1
public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
     private ObservableCollection<MyDataClass> m_myList; 
     public ObservableCollection<MyDataClass> _myList 
     { 
     get 
     { 
      return m_myList; 
     } 
     set 
     { 
      m_myList = value; 
      RaisePropertyChanged("_myList"); 
     } 
     } 

     public MainWindow() 
     { 
      InitializeComponent(); 
      _myList = new ObservableCollection<MyDataClass>(); 
      comboBox1.DataContext = _myList; 
     } 

     private void Button_Click(object sender, EventArgs e) 
     { 
      _myList = AnotherClass.SomeMethod(); 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 
     public void RaisePropertyChanged(String _Prop) 
     { 
      if (PropertyChanged != null) 
      { 
       this.PropertyChanged(this, new PropertyChangedEventArgs(_Prop)); 
      } 
     } 
} 

를 작동하는 방법 당신은 당신이 실제로, 당신은 ObservableCollection에를 업데이트하지 않는 속성에 값을 할당하고 있기 때문입니다 참조 할 수 있습니다.
따라서 속성으로 처리해야하며 INotifyPropertyChanged를 구현해야합니다.

그런데 WCF DataContracts는 INotifyPropertyChanged를 자동으로 구현합니다.

+0

RaisePropertyChanged 함수에서 (PropertyChanged! = null) 항상 false인지 확인해 주셔서 감사합니다. – shtkuh

+0

다른 클래스의 이벤트에 명시 적으로 가입하지 않으면 정상입니다. 이게 WPF 문제를 해결합니까? –

+0

다른 수업에서 이벤트를 만들고 구독하는 방법에 대한 예를 들어 주시겠습니까? – shtkuh

0

잘 ObservableCollection을 사용하고 있으므로 INPC를 원하지 않는다면 수집하고 새로운 데이터로 다시 읽어들입니다. GUI 스레드에서 ObservableCollection을 추가/제거하고 있는지 확인하십시오. Dispatcher가

관련 문제