Перехват события фильтра CollectiveViewSource в ViewModel - PullRequest
1 голос
/ 14 января 2011

Как мне перехватить событие Filter коллекции CollectionViewSource в ViewModel, используя свет MVVM?

Ответы [ 2 ]

3 голосов
/ 14 января 2011

Не знаком с MVVM Light, но я почти уверен, что вы говорите о стандартных битах фреймворка WPF.

Свойство Filter в ICollectionView - это Predicate<object>, которое вы можете установить для данного метода в вашей модели представления, который будет вызываться каждый раз, когда необходимо выполнить Filter.

Одним из способов достижения этого является определение вашего ICollectionView как свойства внутри ViewModel, которое связано с вашим View.

private ICollectionView _view;

public ICollectionView Data
{
    get 
    {
        if (_view == null)
        {
            _view = CollectionViewSource.GetDefaultView(someCollection);
            _view.Filter = Filter;
        }

        return _view;
    }
}

private bool Filter(object arg)
{
     //arg is the object being filtered on to make the decision of
     //it being included in the returned ICollectionView

     return true;
}

Это позволяет всей логике оставаться в ViewModel, которая, как я считаю, является вашей конечной целью.

0 голосов
/ 18 января 2011

Вас может заинтересовать пример приложения BookLibrary , которое делегирует Фильтр CollectionViewSource в ViewModel. Тем не менее, он не использует MVVM Light. Образец является частью WPF Application Framework (WAF) .

...