我的ViewModel有一个IReactiveList,它绑定到View中的网格。我现在想要根据用户驱动的事件过滤数据。我的问题是,最好的办法是什么?
我能看到的唯一方法是创建一个新的ReactiveList实例,该实例仅包含已过滤的数据,并在每次过滤器事件更改时将其设置为ViewModel IReactiveList属性。我不喜欢这样,因为我正在为每个过滤器事件创建新的ReactiveList实例。
有更好的方法吗?显然我可以直接操作VM中的View Grid过滤器,但这会破坏MVVM。
非常感谢。
答案 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()
即可重新过滤数据。