我想从ObservableCollection获取一个范围,以便循环遍历它并更改这些项的属性。使用ObservableCollection类有一个简单的内置方法吗?
答案 0 :(得分:6)
您可以使用Skip
和Take
。
System.Collections.ObjectModel.ObservableCollection<int> coll =
new System.Collections.ObjectModel.ObservableCollection<int>()
{ 1, 2, 3, 4, 5 };
foreach (var i in coll.Skip(2).Take(2))
{
Console.WriteLine(i);
}
答案 1 :(得分:3)
对于循环,ObservableCollection<T>
派生自Collection<T>
,并实现IList<T>
。这允许你按索引循环:
for (int i=5;i<10;++i)
{
DoSomething(observableCollection[i]);
}
如果你想通过LINQ对集合进行查询,你有几个选择。您可以使用Skip()和Take(),或按索引构建新范围和访问权限:
var range = Enumerable.Range(5, 5);
var results = range.Select(i => DoMappingOperation(observableCollection[i]));
或者:
var results = observableCollection.Skip(5).Take(5).Select(c => DoMappingOperation(c));
答案 2 :(得分:1)
ObservableCollection<T>
实现Colletion<T>
实现IEnumerable
所以你应该能够做到(如果你正在寻找一个符合给定标准的范围):
foreach(var item in observerableCollection.Where(i => i.prop == someVal))
{
item.PropertyToChange = newValue;
}
或任意范围(在这种情况下,它需要项目10 - 40):
foreach(var item in observableCollection.Skip(10).Take(30))
{
item.PropertyToChange = newValue;
}
答案 3 :(得分:1)