我有一些表(使用ListView),我想在表中顯示一些對象(使過濾器),如果某些複選框被選中....(如果複選框沒有選中,我想顯示所有表項)如何通過綁定到複選框過濾表項?
我該如何使用mvvm來做到這一點?我無法使用xaml後面的.cs文件。
感謝
我有一些表(使用ListView),我想在表中顯示一些對象(使過濾器),如果某些複選框被選中....(如果複選框沒有選中,我想顯示所有表項)如何通過綁定到複選框過濾表項?
我該如何使用mvvm來做到這一點?我無法使用xaml後面的.cs文件。
感謝
這裏是一個小例子如何能在你的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
希望幫助
您可以複選框的財產器isChecked綁定在視圖模型。而在prpoperty二傳手,你可以過濾你的集合綁定到ListView。
XAML:
<CheckBox IsChecked="{Binding IsChecked}"/>
視圖模型:
private bool _isChecked;
public bool IsChecked
{
get
{
return _isChecked;
}
set
{
_isChecked = value;
//filer your collection here
}
}