私はいくつかのテーブル( ListView を使用)を持っていて、いくつかのチェックボックスがチェックされている場合、テーブルにいくつかのオブジェクト(フィルタを作成)を表示したい....(チェックボックスがチェックされていない場合、すべてのテーブル項目を表示したい)
mvvm を使用してどのように行うことができますか? xaml の背後にある .cs ファイルを使用できません。
ありがとう
これがどのように機能するかの小さな例です
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));
}
}
}
編集 完全な例はここにあります
それが役立つことを願っています
ViewModel のチェックボックスの IsChecked プロパティをバインドできます。また、プロパティ セッターでは、ListView にバインドされるコレクションをフィルター処理できます。
XAML:
<CheckBox IsChecked="{Binding IsChecked}"/>
ビューモデル:
private bool _isChecked;
public bool IsChecked
{
get
{
return _isChecked;
}
set
{
_isChecked = value;
//filer your collection here
}
}