0

私はいくつかのテーブル( ListView を使用)を持っていて、いくつかのチェックボックスがチェックされている場合、テーブルにいくつかのオブジェクト(フィルタを作成)を表示したい....(チェックボックスがチェックされていない場合、すべてのテーブル項目を表示したい)

mvvm を使用してどのように行うことができますか? xaml の背後にある .cs ファイルを使用できません。

ありがとう

4

2 に答える 2

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

編集 完全な例はここにあります

それが役立つことを願っています

于 2012-08-30T07:06:02.137 に答える
2

ViewModel のチェックボックスの IsChecked プロパティをバインドできます。また、プロパティ セッターでは、ListView にバインドされるコレクションをフィルター処理できます。

XAML:

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

ビューモデル:

private bool _isChecked;
public bool IsChecked
{
   get
   {
     return _isChecked; 
   }
   set
   {
     _isChecked = value;
     //filer your collection here
   }
}
于 2012-08-30T06:38:26.013 に答える