【发布时间】:2014-03-07 05:23:43
【问题描述】:
我正在使用 ItemsControl 来显示项目列表,它的 xaml 就像
<ItemsControl ItemsSource="{Binding ShelfItemsCollection}" Name="shelfGridView" Margin="5" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<Stackpanel>
<Image Width="150" Height="200" Stretch="Fill" Source="{Binding CoverImage}" ></Image>
+
some other infos
</Stackpanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
我面临的问题是我在列表中有近 100 个项目,我正在根据某些属性对列表进行一些过滤操作,并将结果限制为较小的否(一次说 20 个项目)进行此过滤刷新和加载列表视图花了很多时间。 这是我用来过滤的代码
ICollectionView dataView = CollectionViewSource.GetDefaultView(shelfGridView.ItemsSource);
dataView.Filter = CloudFilter;
dataView.Refresh();
private bool CloudFilter(object item)
{
MyObject lib = item as MyObject;
return lib.Property !=valuetofilter;
}
有什么方法可以提高性能或渲染缓慢的任何具体原因吗?
【问题讨论】:
-
您是否使用过滤器将项目限制为20?
-
根据某些属性限制项目,你可以看到 CloudFilter() ,基于属性值,例如如果 property.Contains("Japan") ,那么它只显示与术语日本相关的记录,计数不一定是 20。我也编辑了问题
-
发布更多代码,让我们用您的示例和数据结构进行测试。
-
pastebin.com/3CRBLnU2 这里是 xaml 和 c# 的代码。必须使用一些硬编码值进行测试。
标签: wpf c#-4.0 wpf-controls itemscontrol