2015-11-11 152 views
1

我有一個ListView和它從Internet填充的數據源。一旦它被填充,它應該保持靜態,除非用戶發出新的http請求。現在我有這樣的事情:動態更改ListView的數據源

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

看看https://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.110).aspx – Paparazzi

回答

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