我有一个ListView和数据源,它从互联网上填充。一旦填充它,它应该保持静态,除非用户发出新的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
?然后,当再次取消选中该复选框时,我将如何使其显示初始数据源?
答案 0 :(得分:1)
以下是一些可以帮助您的代码。请注意,这未经过测试或编译,但它可以为您提供有关如何处理您的案例的一些提示。诀窍是使用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));
}
}