我有一个带有 ListBox(称为 listMyItems)的 WPF 应用程序,它已成功绑定到我创建的 MyItems 类。我有一个名为 currentMyItems 的 MyItems 列表,然后将其作为 ItemSource 分配给 ListBox。一切正常,如果我将一个项目添加到 currentMyItems 中,它会弹出在列表中,等等。
当我尝试删除列表框中选定的项目时,会出现问题。这是我使用的代码:
currentMyItems.Remove((MyItem)listMyItems.SelectedItem);
该项目从列表框中消失,但下次我更新它时,它会弹出,因为它从未被删除。有小费吗?
我想您可能对数据绑定的工作原理感到困惑。当您绑定一个属性时,您就是在告诉 WPF 去其他地方查找该属性的值。
当您绑定ListBox.ItemsSource
财产给currentMyItems
,您正在告诉 WPF 去查看currentMyItems
list 来查找其项目列表。如果currentMyItems
is an ObservableCollection
代替List<T>
,那么当您从集合中添加或删除项目时,UI 将自动收到更新绑定值的通知。
根据您在问题中所说的内容,听起来您有两个集合,其中一个是绑定的,另一个用于在发生更改时重新创建第一个集合。这一切都不需要。
只需创建一个ObservableCollection<MyItem>
,将其绑定到ListBox.ItemsSource
属性,然后从该单个集合中添加或删除项目。它应该按您的预期工作。
<ListBox x:Name="listMyItems" ItemsSource="{Binding MyItems}" />
and
MyItems.Add((MyItem)listMyItems.SelectedItem)
MyItems.Remove((MyItem)listMyItems.SelectedItem)
如果您有兴趣,我的博客上还为那些难以理解 DataContext 的 WPF 用户提供了一些初学者文章。您可能想查看了解从 WinForms 切换到 WPF 时心态的变化 http://rachel53461.wordpress.com/2012/10/12/switching-from-winforms-to-wpfmvvm/ and 你所说的“DataContext”是什么? http://rachel53461.wordpress.com/2012/07/14/what-is-this-datacontext-you-speak-of/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)