我在本地获取一些数据,实际的获取过程非常快。让我们说,结果我在几毫秒之后就有了一个List。
当我将一些项目控件(Ex ListBox)绑定到此数据时,需要一些时间才能在项目控件上显示数据。例如,如果列表中有100个项目,则在ListBox中显示项目大约需要10秒钟。越多越好。
主要问题在于数据显示。每个项目都有一个图像路径。因此,当执行Itemtemplate时,它会将图像缩小到预定义的大小并显示它。因此,图像缩小的CPU时间越多,UI就越有时间响应。
<DataTemplate x:Key="itemTemplate">
<StackPanel>
<Image Width="48" Height="48">
<Image.Source>
<BitmapImage DecodePixelWidth="48" UriSource="{Binding ImagePath}" />
</Image.Source>
</Image>
</StackPanel>
</DataTemplate>
为了使UI响应,我使用Rx将图像解码移动到异步线程上,这是有效的。但是,由于这是一个简单的项目(单个exe),我试图避免仅为此任务使用Rx。那么,如果没有Rx,我怎么能这样做?
list.ToObservable(Scheduler.Default)
.Buffer(5)
.ObserveOn(SynchronizationContext.Current)
.Subscribe(data =>
{
foreach (var item in data)
UIList.Add(item);
}, null, null);
答案 0 :(得分:0)
冒着明显的风险,您是否检查过WPF可视化工具以确保您的ListBox实际上是虚拟化项目?