При привязывании ObservableCollection <T>к ListView, как ListView выполняет получение данных для отображения? - PullRequest
1 голос
/ 20 февраля 2012

Я просматривал сайт Microsoft и застал меня за чтением ObservableCollection .

Я придумал быстрый сценарий в своей голове и решил, что действительно могу что-то использоватьвот так.

Я создал пример класса, который наследуется от ObservableCollection , как показано здесь:

public class Ledger : ObservableCollection<LedgerEntry>, IEnumerable
{
    private ObservableCollection<LedgerEntry> _items;
    private decimal _currentBalance;

    public Ledger(IEnumerable<LedgerEntry> items)
        : base(items)
    {
        _items = new ObservableCollection<LedgerEntry>(items);
        _currentBalance = 0m;
    }

    public new IEnumerator GetEnumerator()
    {
        var enumerator = _items.GetEnumerator();

        while (enumerator.MoveNext())
        {
            var currentItem = enumerator.Current;

            _currentBalance += currentItem.Amount;
            currentItem.SetBalance(_currentBalance);

            yield return currentItem;
        }
    }
}

Подумайте о банковском счете - я бы хотел, чтобы каждый элемент LedgerEntry содержалв коллекции, чтобы «знать» это баланс.

Любой, кто -

Что мне интересно, так это - учитывая приведенный выше пример, я вижу, что GetEnumerator () вызывается один раз, когда я связываю его с ListView, и теперь яМне любопытно - как на самом деле ListView извлекает / просматривает данные, содержащиеся в коллекции?

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

Любая информацияо том, как это работает?

Спасибо!

1 Ответ

1 голос
/ 20 февраля 2012

Если в коллекции реализовано IList<T>, которое будет использоваться для доступа к элементам по индексу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...