【发布时间】:2011-05-21 15:45:13
【问题描述】:
我有一个管理配置集的 WPF 窗口,它允许用户编辑配置集(编辑按钮)和删除配置集(删除按钮)。该窗口有一个 ListBox 控件,该控件按名称列出配置集,并且其 ItemsSource 具有与配置集列表的绑定集。
我正在尝试删除窗口代码隐藏文件中的项目..
private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
var removedItems = configSetListBox.SelectedItems;
foreach(ConfigSet removedItem in removedItems)
{
configSetListBox.Items.Remove(removedItem);
}
}
我的代码产生了一个无效的操作异常,指出“改为使用 ItemsControl.ItemsSource 访问和修改元素”。我应该访问什么属性才能从 ListBox 中正确删除项目?或者在 WPF 中是否有更优雅的方式来处理这个问题?如果你愿意的话,我的实现有点像 WinForm :)
解决方案
private void RemoveButton_Click(object sender, RoutedEventArgs e)
{
foreach(ConfigSet removedItem in configSetListBox.SelectedItems)
{
(configSetListBox.ItemsSource as List<ConfigSet>).Remove(removedItem);
}
configSetListBox.Items.Refresh();
}
在我的例子中,我有一个 List 作为 ItemSource 绑定类型,所以我必须以这种方式进行转换。如果不刷新 Items 集合,ListBox 不会更新;所以这是我的解决方案所必需的。
【问题讨论】:
-
您的 itemsource 是可观察的集合吗?
标签: c# wpf data-binding listbox