У меня есть несколько хороших анимаций, которые показывают появление, когда я добавляю элемент в список.Я подумал, что было бы неплохо поместить небольшую задержку между каждым добавляемым элементом, так что будет хороший проход по каскаду (LB использует горизонтальную StackPanel), так как все элементы добавляются.Поскольку у меня никогда не будет результирующего набора> 10 элементов, для меня это не так уж и плохо.
Проблема в том, что список не добавляет элемент после каждого добавления, а ожидает завершения моего метода, а затем показывает все новые элементы в массовом порядке.Итак, в приведенном ниже (преувеличенном) примере моя страница зависает на 10 секунд, а затем отображаются все десять элементов.
private void bookItemsLoaded(DownloadStringCompletedEventArgs e) {
BookResults.Clear();
foreach (AmazonTitleSearchResultDTO item in BookItemDTOLoader.LoadObjects(e.Result)) {
BookResults.Add(new AmazonExplorerBookItemViewModel() { ImageURL = item.CoverURL, Title = item.Title, ASIN = item.ASIN });
Thread.Sleep(1000);
}
}
Как я могу заставить Silverlight отображать один элемент в секунду?(да, я знаю, что это будет мучительным опытом для пользователя. Реальная задержка будет намного меньше)
[Вот ссылка на статью, показывающую, как сделать анимацию элементов LB, хотябольшинство читающих это, вероятно, уже видели это]
РЕДАКТИРОВАТЬ
Ответ ниже идеален, но вот несколько более простая версия, без рекурсии.
//get all the items to add into a local, tmeporary list, and call this method:
private void AddBookToResults(List<AmazonTitleSearchResultDTO> bookList)
{
DispatcherTimer Timer = new DispatcherTimer() { Interval = new TimeSpan(0, 0, 1) };
int index = 0;
Timer.Tick += (s, e) => {
ItemCollection.Add(temp[index++]);
if (index == temp.Count)
Timer.Stop();
};
Timer.Start();
}