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");
上述就是C#学习教程:WPF中的INotifyPropertyChanged分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1039406.html