WPF中的INotifyPropertyChanged

尝试了解WPF。 这是我的测试类:

public partial class MainWindow : Window, INotifyPropertyChanged { private ObservableCollection _myList = new ObservableCollection(); public ObservableCollection MyList { get { return _myList; } set { _myList = value; RaisePropertyChanged("_myList"); } } public MainWindow() { InitializeComponent(); comboBox1.DataContext = _myList; } private void button1_Click(object sender, RoutedEventArgs e) { MyList = AnotherClass.SomeMethod(); } public event PropertyChangedEventHandler PropertyChanged; private void RaisePropertyChanged(string propertyName) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } internal static class AnotherClass { public static ObservableCollection SomeMethod() { return new ObservableCollection {"this","is","test"}; } } 

这是XAML

   

如何使这段代码工作? 我想在单击按钮并更新MyList后,将更改ComboBox数据。 PropertyChangedEventHandler始终为null。

问题是你直接将原始列表设置到Window.DataContext ,所以没有任何东西可以监听windows的PropertyChanged事件。

要解决此问题,请将DataContext设置为窗口本身:

 this.DataContext = this; 

然后更改Binding所以请参阅属性:

  

您还需要更改属性定义,以便它引发要更改的属性的名称,而不是成员的名称:

 this.RaisePropertyChanged("MyList"); 

我认为你有两个问题:

1)绑定应该是: {Binding MyList}

2)在RaisePropertyChanged("MyList"); setter上你应该使用RaisePropertyChanged("MyList");