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的一个实例):

<ListBox 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,并且ListBox内容不被刷新.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...