首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

向ObservableCollection添加数据不会更新ListBox条目

ObservableCollection是一个实现了INotifyCollectionChanged接口的集合类,它可以在集合发生变化时通知绑定到它的控件进行更新。在WPF中,ListBox是一个常用的控件,可以用来展示集合中的数据。

当我们向ObservableCollection添加数据时,确实应该会更新ListBox的条目。如果添加数据后没有更新ListBox条目,可能是由于以下几个原因:

  1. 数据绑定问题:首先要确保ListBox的ItemsSource属性已经绑定到了ObservableCollection。可以通过在XAML中设置ItemsSource属性或者在代码中动态绑定来实现。例如:
代码语言:csharp
复制
<ListBox ItemsSource="{Binding MyCollection}" />
  1. 数据更新问题:ObservableCollection只会在集合发生变化时通知控件进行更新,而不会在集合中的数据发生变化时通知。如果你想要在数据发生变化时也更新ListBox条目,需要确保集合中的数据是可观察的。可以使用可观察的对象,如ObservableObject,或者实现INotifyPropertyChanged接口来实现数据的可观察性。
  2. UI线程问题:如果你在非UI线程上修改了ObservableCollection,那么UI界面不会立即更新。你需要确保在UI线程上进行集合的修改操作。可以使用Dispatcher来将操作派发到UI线程上执行。

综上所述,如果向ObservableCollection添加数据后没有更新ListBox条目,你可以检查数据绑定是否正确,确保集合中的数据是可观察的,并在UI线程上进行集合的修改操作。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • [C#][控件]列表控件listbox(一)

    1. 常用属性列表:     SelectionMode    组件中条目的选择类型,即多选(Multiple)、单选(Single)     Rows             列表框中显示总共多少行     Selected         检测条目是否被选中     SelectedItem     返回的类型是ListItem,获得列表框中被选择的条目     Count            列表框中条目的总数     SelectedIndex    列表框中被选择项的索引值     Items            泛指列表框中的所有项,每一项的类型都是ListItem 2. 取被选中项的值     ListBox.SelectedValue 3. 添加项:     ListBox.Items.Add("所要添加的项"); 4. 移出指定的项:     //首先判断列表框中的项是否大于0     If(ListBox.Items.Count > 0 )     {         //移出选择的项         ListBox.Items.Remove(ListBox.SelectedItem);     } 5. 清空所有项:     //首先判断列表框中的项是否大于0     If(ListBox.Items.Count > 0 )     {         //清空所有项         ListBox.Items.Clear();     } 6. 列表框可以一次选择多项:       只需设置列表框的属性 SelectionMode="Multiple",按Ctrl可以多选     动态设置代码如下:     ListBox.SelectionMode = SelectionMode.MultiExtended; 7. 两个列表框联动,即两级联动菜单     //判断第一个列表框中被选中的值     switch(ListBox1.SelectValue)     {     //如果是"A",第二个列表框中就添加这些:     case "A":         ListBox2.Items.Clear();         ListBox2.Items.Add("A1");         ListBox2.Items.Add("A2");         ListBox2.Items.Add("A3");     //如果是"B",第二个列表框中就添加这些:     case "B":         ListBox2.Items.Clear();         ListBox2.Items.Add("B1");         ListBox2.Items.Add("B2");         ListBox2.Items.Add("B3");     } 8. 实现列表框中项的移位     即:向上移位、向下移位 具体的思路为:创建一个ListBox对象,并把要移位的项先暂放在这个对象中。如果是向上移位,就是把当前选定项的的上一项的值赋给当前选定的项,然后把刚才新加入的对象的值,再附给当前选定项的前一项。     具体代码为:     //定义一个变量,作移位用     index = -1;     //将当前条目的文本以及值都保存到一个临时变量里面     ListItem lt=new ListItem (ListBox.SelectedItem.Text,ListBox.SelectedValue);     //被选中的项的值等于上一条或下一条的值     ListBox.Items[ListBox.SelectedIndex].Text=ListBox.Items[ListBox.SelectedIndex + index].Text;     //被选中的项的值等于上一条或下一条的值     ListBox.Items[ListBox.SelectedIndex].Value=ListBox.Items[ListBox.SelectedIndex + index].Value;     //把被选中项的前一条或下一条的值用临时变量中的取代     ListBox.Items[ListBox.SelectedIndex].Test=lt.Test;     //把被选中项的前一条或下一条的值用临时变量中的取代     ListBox.Items[ListBox.SelectedIndex].Value=lt.Value;     //把鼠标指针放到移动后的那项上     ListBox.Items[ListBox.SelectedIndex].Value=lt.Value; 9. 移动指针到指定位置:       (1).移至首条

    02

    WPF Binding学习(四) 绑定各种数据源

    在这里我们使用了ListView控件和GridView控件来显示数据,这两个控件从表面来看应该属于同一级别的控件。实际上并非如此!ListView是ListBox的派生类,而GridView是ViewBase的派生类,ListView中的View是一个ViewBase对象,所以,GridView可以做为ListView的View来使用而不能当作独立的控件来使用。这里使用理念是组合模式,即ListView由一个View,但是至于是GridVIew还是其它类型的View,由程序员自己选择。其次,GridView的内容属性是Columns,这个属性是GridViewColumnCollection类型对象。因为XAML支持对内容属性的简写,可以省略<GridView.Columns>这层标签,直接在GridView内部定义<GridViewColumn>对象,GridViewColumn中最重要的一个属性是DisplayBinding(类型是BindingBase),使用这个属性可以指定这一列使用什么样的Binding去关联数据-----这与ListBox有些不同,ListBox使用的是DisplayMemberPath属性(类型是String)。如果想用更复杂的结构来表示这一标题或数据,则可为GridViewColumn设置Head Template和Cell Template,它们的类型都是DataTemplate

    03

    不使用反射,“一行代码”实现Web、WinForm窗体表单数据的填充、收集、清除,和到数据库的CRUD

    问题篇:     昨天在CSDN看到这样一个帖子:“苦逼的三层代码”: 采用传统的三层架构写代码,每个数据表都要定义一个实体对象,编写后台的时候, Web层需要针对页面的用户输入逐个手动编写赋值到实体对象的各个属性,然后DAL层还要用SqlHelper 进行各个存储过程对应参数的实体赋值, 我的天呀,写几个表还好,多个表呢, 写的后台都没力气, 典型的苦逼代码工没营养,各位有啥好的处理方法或开发方式。。     看到跟帖,大部分都说使用ORM解决这个问题,但我觉得ORM还是没有解决贴主的几个问题: 每个

    08

    金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap

    OpenLdap(Lightweight Directory Access Protocol)是什么?它其实是一个开源的、具备工业标准特性的应用协议,可以使用TCP协议提供访问控制和维护分布式信息的目录信息。这是一个传统意义上的书面解释,是的,毫无疑问,你会一脸懵逼。好吧,让我们变得感性一点,假如我每天早上使用Twitter想听听懂王又吹了什么牛,登录Twitter账号密码,紧接着又想上Instagram看看女神又post了什么新靓照,好的,登录Instagram账号密码,摸了一上午的鱼之后,突然想起来要登录公司的邮箱,看看有没有新需求,是的,又需要那该死的账号和密码,甚至于查询社保、公积金提取、交罚款都需要各自系统的账号和密码。想象一下,如果有一套系统可以统一管理和维护所有下游应用的账号和权限,我们不需要花时间重复的注册新应用的账号,而只需要关注应用本身,从而实现账号集中认证管理,此时作为账号管理员的我们只须维护OpenLDAP 服务器条目即可,金瓯无缺江山一统,这就是openladp能够带给我们的好处。

    00
    领券