我有一些表(使用ListView),我想在表中显示一些对象(make filter),如果选中了一些复选框....(如果未选中复选框,我想显示所有表项)
我怎样才能使用mvvm?我不能使用xaml背后的.cs文件。
由于
答案 0 :(得分:2)
您可以在ViewModel中绑定复选框的IsChecked属性。在prpoperty setter中,您可以过滤收集到ListView的集合。
<强> XAML:强>
<CheckBox IsChecked="{Binding IsChecked}"/>
<强>视图模型:强>
private bool _isChecked;
public bool IsChecked
{
get
{
return _isChecked;
}
set
{
_isChecked = value;
//filer your collection here
}
}
答案 1 :(得分:2)
这里有一个小例子如何运作
在您的xaml上的代码,绑定到FilterItems属性
<CheckBox Content="should i filter the view?" IsChecked="{Binding FilterItems}" />
<ListView ItemsSource="{Binding YourCollView}" />
在您的模型视图中使用代码
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
希望有所帮助