动态更改ListView的数据源

时间:2015-11-11 15:57:50

标签: c# wpf data-binding

我有一个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?然后,当再次取消选中该复选框时,我将如何使其显示初始数据源?

1 个答案:

答案 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));
        }
    }