2012-08-30 64 views
0

我有一些表(使用ListView),我想在表中顯示一些對象(使過濾器),如果某些複選框被選中....(如果複選框沒有選中,我想顯示所有表項)如何通過綁定到複選框過濾表項?

我該如何使用mvvm來做到這一點?我無法使用xaml後面的.cs文件。

感謝

回答

2

這裏是一個小例子如何能在你的XAML工作

代碼,綁定到FilterItems財產

<CheckBox Content="should i filter the view?" IsChecked="{Binding FilterItems}" /> 
<ListView ItemsSource="{Binding YourCollView}" /> 

代碼behond你的模型視圖

public class MainModelView : INotifyPropertyChanged 
{ 
    public MainModelView() 
    { 
     var coll = new ObservableCollection<YourClass>(); 
     yourCollView = CollectionViewSource.GetDefaultView(coll); 
     yourCollView.Filter += new Predicate<object>(yourCollView_Filter); 
    } 

    bool yourCollView_Filter(object obj) 
    { 
     return FilterItems 
      ? false // now filter your item 
      : true; 
    } 

    private ICollectionView yourCollView; 
    public ICollectionView YourCollView 
    { 
     get { return yourCollView; } 
     set 
     { 
      if (value == yourCollView) { 
       return; 
      } 
      yourCollView = value; 
      this.NotifyPropertyChanged("YourCollView"); 
     } 
    } 

    private bool _filterItems; 
    public bool FilterItems 
    { 
     get { return _filterItems; } 
     set 
     { 
      if (value == _filterItems) { 
       return; 
      } 
      _filterItems = value; 
      // filer your collection here 
      YourCollView.Refresh(); 
      this.NotifyPropertyChanged("FilterItems"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void NotifyPropertyChanged(String propertyName) 
    { 
     var eh = PropertyChanged; 
     if (eh != null) { 
      eh(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

編輯 一個完整的例子位於here

希望幫助

1

您可以複選框的財產器isChecked綁定在視圖模型。而在prpoperty二傳手,你可以過濾你的集合綁定到ListView。

XAML:

<CheckBox IsChecked="{Binding IsChecked}"/> 

視圖模型:

private bool _isChecked; 
public bool IsChecked 
{ 
    get 
    { 
    return _isChecked; 
    } 
    set 
    { 
    _isChecked = value; 
    //filer your collection here 
    } 
}