在ViewModel中捕获CollectiveViewSource的Filter事件

时间:2011-01-14 19:43:52

标签: wpf mvvm mvvm-light

如何使用MVVM灯在ViewModel中捕获CollectionViewSource的Filter事件?

2 个答案:

答案 0 :(得分:3)

不熟悉MVVM Light但是我很确定你所说的是标准的WPF框架位。

Filter上的ICollectionView属性为Predicate<object&gt;您可以将其设置为ViewModel上的给定方法,每次执行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中,我认为这是您的最终目标。

答案 1 :(得分:0)

您可能对 BookLibrary 示例应用程序感兴趣,该应用程序将CollectionViewSource的Filter委托给ViewModel。但是,它不使用MVVM Light。该示例是 WPF Application Framework (WAF) 的一部分。