C# 过滤器可观测采集

C# 过滤器可观测采集,c#,.net,silverlight,windows-phone-7,C#,.net,Silverlight,Windows Phone 7,我对编码非常陌生,正在尝试学习为Windows phone编码。从上周开始,我就一直在解决一个问题,这让我发疯 我有一个可观察集合定义如下: public ObservableCollection<Note> Items { get; private set; } publicobservableCollection项{get;private set;} Note类中有两个变量,分别称为Index和Category 我想过滤可观测集合,以便从中选择特定元素 有没有一个简单的方法可

我对编码非常陌生,正在尝试学习为Windows phone编码。从上周开始,我就一直在解决一个问题,这让我发疯

我有一个
可观察集合
定义如下:

public ObservableCollection<Note> Items { get; private set; }
publicobservableCollection项{get;private set;}
Note
类中有两个变量,分别称为
Index
Category

我想过滤
可观测集合
,以便从中选择特定元素

有没有一个简单的方法可以做到这一点?任何帮助都将不胜感激

您可以执行以下操作:

var myCollection = GetNoteCollection(...);

var result = myCollection.Where(w => w.Category.Equals("MyCategory"));

你没有说你想过滤什么。但不管怎样,看看LINQs和

例如:

var answerToLifeTheUniverseAndEverything = Items.FirstOrDefault(note => note.Index == 42)

更新:这些课程不再可用,请退出

原始答案
尝试以下课程之一:或

OriginalList=新的ObservableCollection();
FilteredList=new OrderedObservableCollection(原始列表,p=>p.Age,a=>a.Age>=18);
FilteredList
仅包含年龄>=18岁的人员,所有人员按年龄排序。如果
原始列表
中有更改,则会自动更新
过滤器列表
。如果
OriginalList
是全局的,并且在页面上使用了
FilteredList
,则必须调用
FilteredList.Unload()
以删除事件绑定-垃圾收集器需要这样才能释放
FilteredList

这些课程没有经过全面测试,如果您发现问题,请在这里报告


顺便说一句:我对
Unload()
方法不满意。是否可以添加弱事件引用之类的内容?

我认为您希望使用的是CollectViewSource。Windows Phone 7.1支持这些功能。 您可以创建它,包装ObservableCollection,并将其设置为ViewModel中的可绑定属性。
我打算自己试试。如果您想知道我的进展如何,请告诉我。

我认为您应该使用列表收集视图列表与您的可观察收集属性一起使用:

1-将ListCollectionView绑定到与以下内容相同的数据源:

ListCollectionView lvs;
var note = from n in Note select n;
        lvs = new ListCollectionView(note.ToList <Note>());
3-为Items属性提供其筛选值:

lvs.Filter = new Predicate<object>(ItemIndexFilter);
List<Note> note_list = new List<Note>();
for (int i = 0; i < lvs.Count; i++)
     {                   
        note_list.Add((Note)lvs.GetItemAt(i));    
     }
var observe = new ObservableCollection<Note>(note_list);
items=observe;
lvs.Filter=新谓词(ItemIndexFilter);
列表注释_List=新列表();
对于(int i=0;i
@Davide感谢您更正标记:)顺便说一句,它们不是“变量”(方法的局部变量),它们要么是属性,要么是字段最有可能的属性。但是..我一直收到一个错误,没有定义“FirstOrDefault”和“Where”。顺便问一下,我可以包含两个搜索参数,比如index==1&&category==2??当然,您需要在using语句中包含System.Linq。是的,您可以拥有任意多的搜索参数(布尔语句)。现在CodePlex正在关闭,您可能需要更新到GitHub页面的链接。另外,我的第一印象是您指出了现有的.NET类,但这些类来自您自己发布的工具包(我假设是基于GitHub帐户名)。你可能想在你的回答中提到这一点,以便充分披露。
public bool ItemIndexFilter(object obj)
    {
        Note note = obj as Note;
        return (note.Index>=10);
    }
lvs.Filter = new Predicate<object>(ItemIndexFilter);
List<Note> note_list = new List<Note>();
for (int i = 0; i < lvs.Count; i++)
     {                   
        note_list.Add((Note)lvs.GetItemAt(i));    
     }
var observe = new ObservableCollection<Note>(note_list);
items=observe;