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.

Другие вопросы по тегам