WP7/Silverlight]在列表框中绑定远程图像,以便用户界面不会';t型块

WP7/Silverlight]在列表框中绑定远程图像,以便用户界面不会';t型块,silverlight,windows-phone-7,Silverlight,Windows Phone 7,(场景:Windows Phone 7/Silverlight) 我有一个列表框,我将简化为这个XAML: <ListBox ItemsSource="{Binding Path=ImageLinks}"> <!-- ImageLinks a collection in ViewModel --> <ListBox.ItemTemplate> <DataTemplate>

(场景:Windows Phone 7/Silverlight)

我有一个列表框,我将简化为这个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>

现在,上面的代码可以工作了,但问题是,当项目被呈现/加载时,或者当它开始下载图像时,它会阻塞UI。而且,由于一次可以容纳多个项目,因此在下载所有相应的图像之前,UI会被阻止

因此,问题是,如何在下载图像时获得此功能而不阻止UI(并避免每次导航视图时都重新下载所有图像)?

提前谢谢。
问题很好地解决了,多亏了你们大家花时间来帮助我。

你们可以在一个未绑定到UI的辅助线程中填充
ImageLinks
,并在填充后直接从代码绑定,而不是直接从XAML绑定。

你们也可以从我的,它正是为这个用例而设计的。如果有帮助,请告诉我!:)

为这个问题创建了一个解决方案。

请参见他的博客文章

谢谢你的建议我想我知道你的意思(尽管ImageLinks是一个列表,ImageSource是一个字符串)。您希望我将ImageSource作为BitmapImage而不是字符串,并在将其绑定到列表框之前填充它。问题是,我使用独立存储保存模型,witch不允许我拥有BitmapImage类型的属性(很抱歉,我没有提到这一点)。我以前确实想过类似的事情,但每次导航视图时都会下载每个图像。您可以在单独的线程中填充
列表。实际上,
ImageSource
可以通过
SetBinding
这样绑定:
ListBoxName.SetBinding(ListBox.ItemsSourceProperty,b)
其中b是
绑定的一个实例
。谢谢。我不知道我是否做错了什么,但我在WP7 emulator中使用了您工具包中的演示项目,当应用程序第一次启动时,UI会锁定几秒钟,而(我认为)它正在加载第一个项目。之后,我可以平滑地向下滚动一些图像已下载的项目,但当我再次访问没有图像的项目时,UI再次锁定。当然,如果让应用程序加载整个集合、退出和重新进入,一切都很顺利,但是,所有这些正是我使用的方法得到的行为;点击页面顶部的“persistent”按钮后,它将切换到PersistentImageCache。听起来我可以在这里把事情说得更清楚……:)我懂了。我再试试看。但是我认为默认情况下你应该使用你的工具包,因为演示可能有点偏颇,因为一旦你可以切换,图像就已经被下载了,你的类可能只是使用浏览器缓存。当我第一次尝试该控件时,我将其添加到带有相关示例数据的xaml页面中。当我用Visual Studio(2010 Express for Windows Phone,从9月16日开始)替换我的时,它崩溃了,直到我删除了引用示例数据的XMLN。谢谢提示!代码已更新为新功能,新版本可在以下位置获得: