我正在尝试过滤ICollection但过滤器没有得到应用,而是它给了我所有记录。谓词中有什么问题吗?所以有两种方法将过滤器应用于集合。首先,它过滤SW_Version的记录,然后在第二个过滤器中过滤匹配的id。基本上我正在实现搜索功能。
Connection
第二过滤器
public class Session
{
public void OpenSession(Connection connection)
{
}
}
答案 0 :(得分:1)
第二个过滤器会覆盖第一个过滤器。如果您希望能够按两个属性进行过滤,则需要在谓词中包含这两个条件:
public void searchMUID()
{
string Mupass = "";
AllCRSP.Filter = obj =>
{
SPFetchCREntity entity = obj as SPFetchCREntity;
return obj != null && entity.SW_Version == SearchMU.ToString() && entity.MU_Identifier == Mupass.ToString();
};
AllCRSP.Refresh();
}
答案 1 :(得分:0)
我更喜欢使用ReactiveUI中的ReactiveList及其derived collection。它只是工作 - 不需要手动刷新
public class TweetsListViewModel : ReactiveObject
{
ReactiveList<Tweet> Tweets = new ReactiveList<Tweet>();
IReactiveDerivedList<TweetTileViewModel> TweetTiles;
IReactiveDerivedList<TweetTileViewModel> VisibleTiles;
public TweetsListViewModel()
{
TweetTiles = Tweets.CreateDerivedCollection(
x => new TweetTileViewModel() { Model = x },
x => true,
(x, y) => x.CreatedAt.CompareTo(y.CreatedAt));
VisibleTiles = TweetTiles.CreateDerivedCollection(
x => x,
x => !x.IsHidden);
}
}
如果SPFetchCREntity未实现INotifyPropertyChanged,您可以使用reset参数创建dervied集合,这是可观察的。每次滴答时,都会过滤整个列表
答案 2 :(得分:0)
这就是我解决双重过滤问题的方法。我从这个链接https://code.msdn.microsoft.com/windowsdesktop/CollectionView-Tips-MVVM-d6ebb4a7
得到了这个想法 public void searchMUID()
{
Muview = (CollectionView)new CollectionViewSource { Source = CRmappings2 }.View; //CRmappings2 is an observable collection and Muview is a public property of collectionview
//FirstCRSP = AllCRSP;
//muview.Filter = null;
Muview.Filter = obj =>
{
SPFetchCREntity entity = obj as SPFetchCREntity;
return obj != null && entity.SW_Version == SearchMU.ToString() && entity.MU_Identifier == Mupass.ToString();
};
Muview.Refresh();
}