Я просматривал сайт Microsoft и был догнал, прочитав ObservableCollection<T>.При привязке ObservableCollection <T> к ListView, как ListView пытается получить данные для отображения?
Я придумал быстрый сценарий в своей голове и решил, что могу использовать что-то вроде этого.
Я сделал класс образца, который inherets от ObservableCollection <T>, как показано здесь:
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 фактически извлекает/просматривает данные, содержащиеся в коллекции?
Моя мысль состояла в том, что она будет перебирать перечислимые числа, но, по-видимому, я ошибаюсь.
Любая информация о том, как это работает?
Спасибо!
Что-то странное в том, что метод GetEnumerator вызывается один раз, если я непосредственно реализую IEnumerable, но он вообще не вызывается, если я принимаю «, IEnumerable» от подписи класса. –
@IanP: Хмм, не знаю всей специфики, много странностей, которые нужно найти ... –