2012-05-16 3 views
3

Это может быть очень просто, но я не смог найти решение.Поиск индекса в ObservableCollection

Я есть:

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

Эта коллекция населена, многие ProcessModel годов.

Мой вопрос в том, что у меня есть ProcessModel, который я хочу найти в своем _collection.

Я хочу сделать это, чтобы найти индекс, где ProcessModel был в _collection, я действительно не уверен, как это сделать.

Я хочу сделать это, потому что я хочу получить в ProcessModel N + 1 перед ним в ObservableCollection (_collection).

ответ

7
var x = _collection[(_collection.IndexOf(ProcessItem) + 1)]; 
+0

Спасибо. Есть ли хороший способ проверить значение null, используя linq? скажем, когда индекс + 1 выходит за пределы. – user101010101

+0

@ user101010101: Проверьте значение 'i + 1'. Он не должен быть больше, чем Length/Count вашего ObservableCollection. –

+0

@Nikhil жаль, что я новичок в этом, как вы это делаете? – user101010101

4

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 
} 
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); 

EDIT для Null Не

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"); 
+0

спасибо, хорошие решения !!! – user101010101

Смежные вопросы