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");