Как заставить list<T & gt; count отражать фактическое количество элементов?
У меня есть
List<T>
к которому я привязываюсь в интерфейсе XAML. XAML использует шаблон для элементов в списке. Названия пунктов в списке находятся слева, а справа у меня есть пара кнопок.Когда я удаляю элемент из списка, привязка данных совершенно правильно удаляет имя элемента из списка; однако в конце списка я получаю дополнительную запись, у которой нет имени, но есть только кнопки.
Я не вижу способа обойти это, потому что, когда я смотрю на
Count
собственность компании List<T>
, он не изменяется путем удаления элемента. Даже если я позвоню TrimExcess()
, он ничего не будет делать, потому что у него есть порог 90% и List<T>
заполнен более чем на 90%.Должно быть, я что-то упускаю здесь, потому что это кажется огромным недостатком в модели привязки данных.
Может ли кто-нибудь предложить способ обойти это?
Добрые пожелания ~ Патрик
Что я уже пробовал:
Единственный способ, который я могу придумать, чтобы исправить это, - это реализовать свою собственную коллекцию, которая гарантирует, что ее количество всегда точно отражает, сколько элементов находится в списке.
Richard Deeming
То Count
недвижимость на List<T>
пример всегда отражает фактическое количество элементов в списке.
(Если только вы не обращаетесь к списку из нескольких потоков без надлежащей синхронизации и внутренние данные не повреждены. Но если бы это было так, вы бы получили странные исключения, когда попытались бы получить к нему доступ.)TrimExcess
речь идет об удалении избытка вместимость в пределах внутреннего хранилища списка. Это не влияет ни на количество элементов в списке, ни на значение Count
собственность.
Должно быть, в вашем коде происходит что-то еще.
Patrick Skelton
Спасибо за ответ.
Должно быть, это действительно странно. Я просто поместил следующее внутри класса, который содержит фактический экземпляр List<t></t>
.int a = _recentDevices.Entries.Count;
_recentDevices.RemoveAt( index );
int b = _recentDevices.Entries.Count;
И граф остается неизменным. Я запускаю отладочный код на эмуляторе Android. Это также C#, который поставляется вместе с Xamarin. Интересно, имеет ли это какое-нибудь отношение к делу? Вздох... Я чувствую, что грядет целая куча трудоемких экспериментов...
Patrick Skelton
Просто заметил. Класс представляет собой пользовательскую коллекцию, и похоже, что он не был полностью реализован - то есть он не реализует ICollection. Я виноват, что не проверил его тип. Поскольку он использовал такие методы, как Add() и RemoveAt (), я просто предположил, что это список. : - |