我应该如何过滤绑定到网格的IReactiveList?

时间:2014-08-08 08:49:52

标签: c# wpf mvvm reactiveui

我的ViewModel有一个IReactiveList,它绑定到View中的网格。我现在想要根据用户驱动的事件过滤数据。我的问题是,最好的办法是什么?

我能看到的唯一方法是创建一个新的ReactiveList实例,该实例仅包含已过滤的数据,并在每次过滤器事件更改时将其设置为ViewModel IReactiveList属性。我不喜欢这样,因为我正在为每个过滤器事件创建新的ReactiveList实例。

有更好的方法吗?显然我可以直接操作VM中的View Grid过滤器,但这会破坏MVVM。

非常感谢。

1 个答案:

答案 0 :(得分:2)

由于IReactiveList实施INotifyCollectionChanged,您是否只是从VM中公开了CollectionView并更改了过滤?

public class MyVM
{
    private readonly IReactiveList data;

    //bind grid to this
    public ListCollectionView DataCollectionView { get; private set; }

    public MyVM(IReactiveList data)
    {
        this.data = data;
        this.DataCollectionView = new ListCollectionView(this.data);
        this.DataCollectionView.Filter = FilterData;
    }

    private bool FilterData(object o)
    {    
        //filter your data how ever you want in here. 
    }
}

在过滤器更改时,只需调用this.DataCollectionView.Refresh()即可重新过滤数据。