Я пытаюсь работать с элементом управления LongListSelector из WP7 Silverlight Toolkit.Это заняло немного работы, но у меня наконец-то появилась работа с моим приложением.К сожалению, у меня возникают некоторые проблемы с правильной обработкой процесса захоронения.
Когда надгробия приложения (или пользователь переходит на другую страницу, выбирая элемент в списке), я сохраняю копию самого верхнего видимого элемента всписок.Я сохраняю его как в переменной класса, так и в коллекции состояний приложения.
ICollection<object> visibleItems = myLongList.GetItemsInView();
_lastItem = null;
if (visibleItems.Count > 0)
_lastItem = visibleItems.First();
IDictionary<string, object> state =
Microsoft.Phone.Shell.PhoneApplicationService.Current.State;
state["IndexByName_LastTopItem"] = _lastItem;
Затем, когда пользователь возвращается на страницу, я проверяю одно из двух значений (состояние или переменную) и использую его длявосстановить последнюю позицию прокрутки.
if (_lastItem == null)
{
if (state.ContainsKey("IndexByName_LastTopItem"))
{
_lastItem = state["IndexByName_LastTopItem"] as Chemical;
}
}
if (_lastItem != null)
Dispatcher.BeginInvoke(() => { myLongList.ScrollTo(_lastItem); });
Это прекрасно работает, если только не надгробия приложения.В этом случае я не получаю никаких ошибок, но список полностью пуст, пока я не коснусь его и не перетяну.Как только я это сделаю, он снова отображается вверху списка.Я посмотрел на источник для элемента управления и обнаружил, что при вызове .ScrollTo (объект) он не получает совпадения.Дальнейшее исследование показало, что при поиске элемента для прокрутки сравнивается использование == вместо Equals.Я только переопределил Equals, и, по-видимому, по умолчанию == сравнивает (по замыслу) ссылки.При восстановлении элемента состояния после захоронения ссылки не совпадают.Я могу переопределить ==, но это неправильно.Я могу изменить и перестроить источник управления, чтобы вместо этого вызывать «равный» (я пытался, и это сработало), но он был написан людьми, намного умнее меня, и мне интересно, если я просто не понимаю.Есть ли лучший способ?