Csharp/C#教程:WPF中的INotifyPropertyChanged分享


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

(0)
上一篇 2022年1月26日
下一篇 2022年1月26日

精彩推荐