Sinisa Janjetovic Ответов: 2

Узнайте индекс collectionlist с конкретным значением в конкретном столбце


У меня есть BidList (ObservableCollection), и я хочу найти индекс строки, в которой, например, Id==25.

Как это сделать?

Что я уже пробовал:

Пробовал с FindIndex и в моем случае это не работает

2 Ответов

Рейтинг:
6

BillWoodruff

Одна из многих мощных функций 'ObservableCollection<T> - это информация о состоянии, которую дает вам 'CollectionChanged EventHandler. Отслеживая последние измененные данные, вы часто можете избежать ненужного кода и/или включить функцию " отменить:

bool suppressOCChangeAction = false;
bool keepOCLastChangeData = true;

NotifyCollectionChangedAction lastAction;
int prevNdx;
int newNdx;
IList oldItems;
IList newItems;

private void OCOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if (suppressOCChangeAction) return;

    if (keepOCLastChangeData)
    {
        lastAction = e.Action;
        prevNdx = e.OldStartingIndex;
        newNdx = e.NewStartingIndex;
        oldItems = e.OldItems;
        newItems = e.NewItems;
    }

    switch (e.Action)
    {
        case NotifyCollectionChangedAction.Add:
            break;
        case NotifyCollectionChangedAction.Remove:
            break;
        case NotifyCollectionChangedAction.Replace:
            break;
        case NotifyCollectionChangedAction.Move:
            break;
        case NotifyCollectionChangedAction.Reset:
            break;
    }
}


Maciej Los

5ed!

Sinisa Janjetovic

Я немного смущен этим ответом. Связано ли это с этим вопросом?

BillWoodruff

Я добавил Это, потому что думал, что это может быть полезно и поможет избежать некоторых ненужных вычислений.

Рейтинг:
15

Maciej Los

Попробуйте что-нибудь вроде этого:

var itemindex =  BidList.IndexOf(BidList.Where(x=>x.Id==25).FirstOrDefault());


Sinisa Janjetovic

Спасибо, но я получаю -1, и определенно это не так. Я проверил его с Id==20, и я должен получить 19.

Или я поставил этот код не на то место? Я вставил его в часть кода, который написал в своем вопросе.

Должен ли я сохранить символ x, как вы написали, или я должен заменить его чем-то другим?

Maciej Los

Я понятия не имею, почему ты получаешь -1.
Да, вы можете заменить [x] любым символом или именем, например: Where(item=>item.Id==20)

Sinisa Janjetovic

Спасибо, это прекрасно работает. Я нашел одну внутреннюю ошибку, все правильно.

Maciej Los

Отличный. Можете ли вы принять мой ответ как решение?

Sinisa Janjetovic

Да, конечно, вы мне очень помогли

Maciej Los

Спасибо.
Овации
Мацей