我认为您可能对数据绑定的工作方式感到困惑。当您绑定一个属性时,您是在告诉 WPF 去其他地方寻找该属性的值。
当您将ListBox.ItemsSource
属性绑定到 时currentMyItems
,您是在告诉 WPF 查看currentMyItems
列表以查找其项目列表。如果currentMyItems
是 aObservableCollection
而不是 a List<T>
,那么当您从集合中添加或删除项目时,UI 将自动接收更新绑定值的通知。
根据您在问题中所说的话,听起来您有两个集合,其中一个是绑定的,另一个用于在发生更改时重新创建第一个集合。这一切都不需要。
只需创建一个ObservableCollection<MyItem>
,将其绑定到ListBox.ItemsSource
属性,然后从该单个集合中添加或删除项目。它应该像你期望的那样工作。
<ListBox x:Name="listMyItems" ItemsSource="{Binding MyItems}" />
和
MyItems.Add((MyItem)listMyItems.SelectedItem)
MyItems.Remove((MyItem)listMyItems.SelectedItem)
如果您有兴趣,我的博客上还有一些初学者文章,供那些努力理解 DataContext 的 WPF 用户使用。您可能想查看了解从 WinForms 切换到 WPF 时思维方式的变化以及您所说的“DataContext”是什么?