C#WPF ListView在删除时不会更新ObservableCollection中的项
试图从C#WPF ListView在删除时不会更新ObservableCollection中的项,c#,wpf,listview,observablecollection,C#,Wpf,Listview,Observablecollection,试图从列表视图中删除可选项,其中项源已绑定到可观察集合调试显示项目被正确标记为选中,并从列表中删除。但是显示的列表视图不会随着更改而更新,因此删除的项目将保持显示的 查看 <ListView BorderThickness = "0" AlternationCount = "2" BorderBrush = "Transparent"
列表视图
中删除可选
项,其中项源
已绑定到可观察集合
<代码>调试显示项目被正确标记为选中,并从列表中删除。但是显示的列表视图
不会随着更改而更新,因此删除的项目将保持显示的
查看
<ListView BorderThickness = "0"
AlternationCount = "2"
BorderBrush = "Transparent"
ItemsSource = "{Binding TestEntries}"
Style = "{StaticResource ListViewStyle}"
ItemContainerStyle = "{StaticResource ListViewItemStyle}"
ScrollViewer.HorizontalScrollBarVisibility="Hidden">
希望有人能给我指出正确的方向试试这个:
在getter
中返回与ObservableCollection
相同的对象,以便它可以通知您的目标
按照@George Alexandria的建议进行自我更新
public ObservableCollection<Communication> TestEntries
{
get
{
return _testEntries;
}
set
{
_testEntries = value;
//OnPropertyChanged(); <-- of no use
}
}
您总是从get返回newobservateCollection
,因此当您尝试删除项时,它会从newobservateCollection
中删除,当然,发送CollectionChanged
,但您的ListView
仅在初始化observedcollection
时立即检索该实例,并且它不知道新集合的CollectionChanged
。这很有意义,感谢您的解释。更换吸气剂后,它就像一个符咒。非常感谢:)。
private void ButtonDeleteCommandExecute()
{
var toDeleteEntries = TestEntries.Where(x => x.IsSelected);
toDeleteEntries.ToList().ForEach((obj) =>
{
TestEntries.Remove(obj as Entry);
});
}
public ObservableCollection<Communication> TestEntries
{
get
{
return _testEntries;
}
set
{
_testEntries = value;
//OnPropertyChanged(); <-- of no use
}
}
TestEntries = new ObservableCollection<Communication>(_testEntries.Where(x=>x.Title.ToUpper().Contains(FilterText.ToUpper())).OrderByDescending(x=>x.Date).ToList());