Patrick Skelton Ответов: 0

Как заставить 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 (), я просто предположил, что это список. : - |

0 Ответов