动态更改ListView的数据源
本文关键字:数据源 ListView 动态 | 更新日期: 2023-09-27 18:21:35
我有一个ListView和数据源,它从Internet填充。一旦它被填充,它应该保持静态,除非用户发出新的http请求。现在我有这样的东西:
class MyDataItem {
public int Field1 { get; set; }
public string Field2 { get; set; }
}
class Window1: Window {
private List<MyDataItem> dataSource = new ...
void sendHttpRequest(...) {
dataSource = getFromInternet();
myListView.ItemsSource = dataSource ;
}
}
然后说,我有一个复选框。当我点击它时,我想通过一些过滤器来过滤数据。
//.........
// the checkbox is checked
var filterDataSource = dataSource.Where(....)
如何使我的ListView将其数据源更新为filterDataSource
?然后,当再次取消选中复选框时,我将如何使其显示初始数据源?
这里有一些代码可以帮助您。请注意,这并没有经过测试或编译,但它可以为您提供一些关于如何处理您的案例的提示。诀窍是使用CollectionViewSource来过滤数据。
class Window1: Window {
private readonly ObservableCollection<MyDataItem> _children;
private readonly CollectionViewSource _viewSource;
public Window1()
{
// ...
_children = new ObservableCollection<MyDataItem>();
_viewSource = new CollectionViewSource
{
Source = _children
};
myListView.ItemsSource = _viewSource;
// ...
}
// This method needs to be called when your checkbox state is modified.
// "filter = null" means no filter
public void ApplyFilter(Func<MyDataItem, bool> filter)
{
if (_viewSource.View.CanFilter)
{
_viewSource.View.Filter = (filter == null) ? (o => true): (o => filter((MyDataItem) o));
}
}