C# · 12月 26, 2021

c# – WPF:绑定列表到列表框

我有一个班: public class A : INotifyPropertyChanged{ public List<B> bList { get; set; } public void AddB(B b) { bList.Add(b); NotifyPropertyChanged(“bList”); } public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(string info) { if (PropertyChanged != null) { PropertyChanged(this,new PropertyChangedEventArgs(info)); } }}

而一个绑定(UserControl的DataContext是A的一个实例):

<List@R_476_2419@ ItemsSource=”{Binding Path=bList}” />

显示元素,将新对象添加到列表后,列表框不会更新

将列表更改为ObservableCollection并删除NotifyPropertyChanged处理程序后,一切正常.

为什么列表不工作?

解决方法 您的财产必须是公开的,否则绑定引擎将无法访问它.

编辑:

After changing list to ObservableCollection and removing the NotifyPropertyChanged handler everything works.

这就是为什么ObservableCollection< T>类被引入… ObservableCollection< T>实现INotifyCollectionChanged,它允许它在添加/删除/替换项目时通知UI.列表与LT; T>不会触发任何通知,所以用户界面无法检测列表的内容何时发生变化.

提出PropertyChanged事件的事实会刷新绑定,但是它意识到它与List< T>的实例相同.如前所述,它重用与ItemsSource相同的ICollectionView,并且List@R_476_2419@的内容不被刷新.