使用ItemsSource时,操作无效。 使用ItemsControl.ItemsSource访问和修改元素

我是Binding和WPF的新手我最近学会了如何使用Binding技术创建一个包含多列的listBox

              

这是代码:

 List arr = search.students(); listBoxSS.ItemsSource = arr; 

但问题是当我尝试使用添加或删除项目或清除时

  listBoxSS.Items.Clear(); 

我需要一个使用项目源的示例或我可以添加或删除项目或清除列表的方式。

编辑:

             

这是代码:

  ObservableCollection Gemployees; var employees = new ObservableCollection(search.employees()); 

search.employees()获取我的数据库中所有员工的列表

  listBoxPE.ItemsSource = employees; Gemployees = employees; 

现在我可以在Gemployees上执行所有方法

  Gemployees.Remove((Student)listBoxSS.SelectedItem); Gemployees.Add((Student)listBoxSS.SelectedItem); 

每当我从Gemployees添加或删除项目时, ListView执行刷新! 很酷,但仍然有点努力绑定。 现在我正在为每个ListView做一个接口类,所以我可以把我的东西放进去。 它在添加项目时不会有任何灵活性。

您将ItemsSource绑定到名为ItemsDataContext的属性,因此要更新集合,您需要转到DataContextItems属性并清除它。

此外, Items属性需要是ObservableCollection类型,而不是List如果您希望它在底层集合更改时更新UI。

您不需要在代码中设置ItemsSource的代码,应将其删除。 您只需要将ItemsSource设置在一个位置,而不是两者。

这是一个如何工作的简单示例:

 // Using Students instead of Items for the PropertyName to clarify public ObservableCollection Students { get; set; } public MyConstructor() { ... Students = search.students(); listBoxSS.DataContext = this; } 

现在,当你有:

  

您将ItemsSource绑定到ObservableCollection ,当您想要清除列表时,您可以调用:

 Students.Clear() 

奇怪但是真实:我的XAML文件中的以下错误击键产生了错误“当ItemsSource正在使用时,操作无效。请改为使用ItemsControl.ItemsSource访问和修改元素。”:

 x` 

请注意关闭元素标记后面的“x`”字符。

我知道这个问题已经在大约2年前得到了回答,但是我自己也遇到了这个问题并且想到了一个可行的解决方案,这个问题很有效。 也许这在某些情况下不起作用,也许我只是没有看到一些东西,但它对我有用,所以我在这里分享它:

 listView.ClearValue(ItemsControl.ItemsSourceProperty); listView.ItemsSource = NewSource; 

我真诚地希望这有助于某人。

您需要处理与ItemsSource数据绑定的集合。 为了获取集合更改通知(添加或删除项目时),您应该使用ObservableCollection

 var students = new ObservableCollection(search.students()); listBoxSS.ItemsSource = students; students.Clear(); students.Add(new Student("ABC")); 

您应该从XAML中删除ItemsSource="{Binding Items}"声明。

我认识的派对迟到了,但我认为这个答案在上面并不十分清楚。 它与流氓角色相关,但这也导致exception:

    

当你的意思是:

          

作为一个新人(或在第一个早晨咖啡之前)很容易认为第一个是正确的,例外并不能解释什么是错的。

将列表框的ItemsSource属性分配给表单类中的公共属性。 然后尝试添加一个删除,在setter中调用PropertyChanged,而不是直接在列表框项源上调用clear。

我有同样的问题,我最终意识到我试图直接向控件的ItemsSource添加一个新项,而不是作为ItemsSource的ObservableCollection。

我想我会发布这个,因为它可能有助于其他新手wpfers。