2

这可能非常简单,但我无法提出解决方案。

我有一个:

ObservableCollection<ProcessModel> _collection = new ObservableCollection<ProcessModel>();

此集合已填充,包含许多 ProcessModel。

我的问题是我有一个 ProcessModel,我想在我的 _collection 中找到它。

我想这样做,所以我能够找到 ProcessModel 在 _collection 中的索引,我真的不确定如何做到这一点。

我想这样做是因为我想在 ObservableCollection (_collection) 中获得 ProcessModel N+1。

4

3 回答 3

8
var x = _collection[(_collection.IndexOf(ProcessItem) + 1)];
于 2012-05-16T12:26:03.390 回答
5

http://msdn.microsoft.com/en-us/library/ms132410.aspx

采用:

_collection.IndexOf(_item)

这是获取下一项的一些代码:

int nextIndex = _collection.IndexOf(_item) + 1;
if (nextIndex == 0)
{
    // not found, you may want to handle this as a special case.
}
else if (nextIndex < _collection.Count)
{
    _next = _collection[nextIndex];
}
else
{
    // that was the last one
}
于 2012-05-16T12:20:25.767 回答
3

由于ObservableCollection是一个序列,因此我们可以使用LINQ

int index = 
_collection.Select((x,i) => object.Equals(x, mydesiredProcessModel)? i + 1 : -1)
           .Where(x => x != -1).FirstOrDefault();

ProcessModel pm =  _collection.ElementAt(index);

我已经将您的索引增加到 1,它符合您的要求。

或者

ProcessModel pm = _collection[_collection.IndexOf(mydesiredProcessModel) + 1];

或者

ProcessModel pm = _collection.ElementAt(_collection.IndexOf(mydesiredProcessModel) + 1);

编辑非空

int i = _collection.IndexOf(ProcessItem) + 1;

var x;
if (i <= _collection.Count - 1) // Index start from 0 to LengthofCollection - 1
    x = _collection[i];
else
    MessageBox.Show("Item does not exist");
于 2012-05-16T12:21:35.170 回答