【发布时间】:2017-07-31 18:44:08
【问题描述】:
试图将selectable 的项目从ListView 中删除,其中ItemsSource 是binded 到ObservableCollection。 Debugging 表明项目被正确标记为选中并删除了列表本身。但是显示的ListView 不会更新更改,因此删除的项目保持shown。
查看
<ListView BorderThickness = "0"
AlternationCount = "2"
BorderBrush = "Transparent"
ItemsSource = "{Binding TestEntries}"
Style = "{StaticResource ListViewStyle}"
ItemContainerStyle = "{StaticResource ListViewItemStyle}"
ScrollViewer.HorizontalScrollBarVisibility="Hidden">
可观察的集合
public ObservableCollection<Entry> TestEntries
{
get => new ObservableCollection<Entry>(_testEntries
.Where(x => x.Title.ToUpper().Contains(FilterText.ToUpper()))
.OrderByDescending(x => x.Date));
set
{
_testEntries = value;
OnPropertyChanged();
}
}
命令(删除项目)
private void ButtonDeleteCommandExecute()
{
var toDeleteEntries = TestEntries.Where(x => x.IsSelected);
toDeleteEntries.ToList().ForEach((obj) =>
{
TestEntries.Remove(obj as Entry);
});
}
希望有人能指出正确的方向
【问题讨论】:
-
你总是从get返回新的
ObservableCollection,所以当你尝试删除项目时,它会从新的ObservableCollection中删除,当然,发送CollectionChanged但是你的ListView检索实例ObservableCollection仅在它被初始化时一次,并且它不知道新集合的CollectionChanged。 -
这很有意义,感谢您的解释。更改吸气剂后,它就像一个魅力。非常感谢:)。
标签: c# wpf listview observablecollection