WP7 / Silverlight] Связывание удаленных изображений в списке, чтобы пользовательский интерфейс не блокировался
(Сценарий: Windows Phone 7 / Silverlight)
У меня есть ListBox, который я упрощу к этому XAML:
<ListBox ItemsSource="{Binding Path=ImageLinks}"> <!-- ImageLinks a collection in ViewModel -->
<ListBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding Path=ImageSource}" /> <!-- ImageSource is a string with the url to the image-->
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Теперь вышеприведенный код работает, но проблема в том, что, когда элемент рендерится / загружается или что-то еще начинает загружать изображение, но при этом он блокирует пользовательский интерфейс. А поскольку в один и тот же момент времени подходит более одного элемента, пользовательский интерфейс блокируется до тех пор, пока не будут загружены все соответствующие изображения.
Итак, вопрос в том, как получить эту функциональность без блокировки пользовательского интерфейса при загрузке изображений (и избежать повторной загрузки их всех при каждом переходе к представлению)?,
Заранее спасибо.
Ну, проблема решена, Спасибо всем, кто нашел время, чтобы помочь мне.
3 ответа
Задержка создала решение именно этой проблемы.
См. Его запись в блоге по этой теме на http://blogs.msdn.com/b/delay/archive/2010/09/02/keep-a-low-profile-lowprofileimageloader-helps-the-windows-phone-7-ui-thread-stay-responsive-by-loading-images-in-the-background.aspx
Вы также можете использовать класс PersistentImageCache из моего инструментария Kawagoe, который был разработан специально для этого варианта использования. Дайте мне знать, если это поможет!:)
Вы могли бы заселить ImageLinks
во вторичном потоке, который не привязан к пользовательскому интерфейсу и связывает его непосредственно с выделенным кодом, как только он заполняется вместо прямой привязки XAML.