从WPF绑定列表框中删除项目

mmv*_*sbg 2 c# wpf binding listbox itemssource

我有一个带有ListBox(名为listMyItems)的WPF应用程序,它成功绑定到我创建的一类MyItems.我有一个名为currentMyItems的MyItems列表,然后将其作为ItemSource分配给ListBox.一切正常,如果我将一个项目添加到它弹出列表上的currentMyItems等,当我尝试删除ListBox中的选定项目时会出现问题.这是我使用的代码:

currentMyItems.Remove((MyItem)listMyItems.SelectedItem);
Run Code Online (Sandbox Code Playgroud)

该项目从ListBox中消失,但下次更新时,它会弹回,因为它从未被删除.有小费吗?

Rac*_*hel 11

我想你可能会对数据绑定的工作方式感到困惑.绑定属性时,您告诉WPF去其他地方寻找该属性的值.

绑定ListBox.ItemsSource属性时currentMyItems,您告诉WPF查看currentMyItems列表以查找其项目列表.如果currentMyItemsObservableCollection而不是a List<T>,那么当您从集合中添加或删除项目时,UI将自动接收更新绑定值的通知.

根据您在问题中所说的内容,听起来您有两个集合,其中一个是绑定的,另一个用于在发生更改时重新创建第一个集合.所有这些都是不需要的.

只需创建一个ObservableCollection<MyItem>,将其绑定到ListBox.ItemsSource属性,然后添加或删除该单个集合中的项目.它应该像你期望的那样工作.

<ListBox x:Name="listMyItems" ItemsSource="{Binding MyItems}" />
Run Code Online (Sandbox Code Playgroud)

MyItems.Add((MyItem)listMyItems.SelectedItem)
MyItems.Remove((MyItem)listMyItems.SelectedItem)
Run Code Online (Sandbox Code Playgroud)

如果你有兴趣,我的博客上也有一些初学者文章,供那些努力理解DataContext的WPF用户使用.您可能想要查看从WinForms切换到WPF时理解改变的思维模式以及您所说的"DataContext"是什么?