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列表以查找其项目列表.如果currentMyItems是ObservableCollection而不是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"是什么?
| 归档时间: |
|
| 查看次数: |
21227 次 |
| 最近记录: |