Wpf 当项目计数超过400个项目时,Listview无法显示列表项目的文本
我注意到,当项目数量超过400项时,我的应用程序中的Listview无法显示Listview项目的文本 我的猜测是,这是手机的内存问题,而不是大型设备的模式 我假设我只需要添加listview的itemsource所基于的项目的一小部分 管理负责显示大量数据的listview的最佳方法是什么 这是我的XAML:Wpf 当项目计数超过400个项目时,Listview无法显示列表项目的文本,wpf,winrt-xaml,windows-8.1,windows-phone-8.1,Wpf,Winrt Xaml,Windows 8.1,Windows Phone 8.1,我注意到,当项目数量超过400项时,我的应用程序中的Listview无法显示Listview项目的文本 我的猜测是,这是手机的内存问题,而不是大型设备的模式 我假设我只需要添加listview的itemsource所基于的项目的一小部分 管理负责显示大量数据的listview的最佳方法是什么 这是我的XAML: <ListView x:Name="ContactList" ScrollViewer.VerticalScrollBarVisibility="Visible"
<ListView x:Name="ContactList" ScrollViewer.VerticalScrollBarVisibility="Visible"
attachedProperties:CategoryHelper.Category="{Binding SelectedCategory, Mode=TwoWay}"
ItemsSource="{Binding SelectedCategory.Contacts}"
VirtualizingStackPanel.VirtualizationMode="Recycling"
SelectedItem="{Binding SelectedContact, Mode=TwoWay}"
HorizontalContentAlignment="Left"
Margin="58,175,0,0"
Height="425"
Width="425"
Background="Transparent" Foreground="#FF333747" VerticalAlignment="Top" Canvas.ZIndex="99" HorizontalAlignment="Left" >
<ListView.Template>
<ControlTemplate>
<ScrollViewer>
<ItemsPresenter VirtualizingStackPanel.VirtualizationMode="{TemplateBinding VirtualizingStackPanel.VirtualizationMode}" />
</ScrollViewer>
</ControlTemplate>
</ListView.Template>
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsStackPanel/>
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="FontSize" Value="26" />
<Setter Property="Margin" Value="0,10" />
<Setter Property="Foreground" Value="#FF333747" />
</Style>
</ListView.ItemContainerStyle>
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox Style="{StaticResource CheckBoxStyle1}"
Loaded="CheckBox_Loaded"
Visibility="{Binding ElementName=grid, Path=DataContext.BroadcastActivated, Converter={StaticResource BoolToVisibilityConverter}, Mode=TwoWay}"
Margin="0,-8" BorderBrush="#FF4E58BC" Checked="ContactChecked" Unchecked="ContactUnchecked">
</CheckBox>
<TextBlock Text="{Binding DisplayName}">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="Holding">
<behaviors:MoveContactAction />
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
<FlyoutBase.AttachedFlyout>
<MenuFlyout>
<MenuFlyoutItem Text="Family" Command="{Binding ElementName=grid, Path=DataContext.MoveCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Text}" />
<MenuFlyoutItem Text="Friend" Command="{Binding ElementName=grid, Path=DataContext.MoveCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Text}" />
<MenuFlyoutItem Text="Business" Command="{Binding ElementName=grid, Path=DataContext.MoveCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Text}" />
<MenuFlyoutItem Text="Others" Command="{Binding ElementName=grid, Path=DataContext.MoveCommand}" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Text}" />
</MenuFlyout>
</FlyoutBase.AttachedFlyout>
</TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
更新:
我现在可以在Listview中显示大量项目
但是,我无法应用DataTemplate而不观察到相同问题的项目未显示
这项工作:
这并不是:
应用绑定后,使用数据模板显示listview项似乎会失败。
如何解决此问题?是的,您不能将它们全部放在内存中。 您可以使用虚拟化。
下面是链接:请记住,这是一部手机,为什么要从列表中的400多个项目开始?首先,想想用户将如何处理这些数据。 如果你有超过400个项目,也许你应该有一些选择来缩小范围。也许你可以拥有结果页面,并将它们组合成一个易于理解的数字,无论是对于手机还是更重要的用户 话虽如此,除了Rang的答案之外,您还可以尝试为应用程序分配更多内存。查看,但具体而言:
<FunctionalCapabilities>
<FunctionalCapability Name="ID_FUNCCAP_EXTEND_MEM"/>
</FunctionalCapabilities>
我的列表显示了几个有空字符串的项目 由于此列表按升序排序,显示空文本的项目显示在列表的开头,而其他项目确实存在,但不在scrollviewer的视口中 因此,我这样做:
if (string.IsNullOrWhiteSpace(contact.DisplayName))
{
continue;
}
我研究了虚拟化文档。我已经设置了高度和宽度,添加了回收,并添加了ItemsStackPanel。不幸的是,这并不能解决我的问题。我已经用代码片段更新了我的帖子。Windows Phone 8.1.0中似乎不支持这一点。下面是另一个资源,它声明上述操作应该有效,但提供了另一个选项:。当然,你不是在处理内存不足的设备,对吧?这是针对WindowsPhone8.1的。因此,与较大的设备相比,所有内存都受到一定程度的限制。我在诺基亚1520上观察到了这一点,诺基亚1520是一款性能卓越的移动设备。Windows Phone 8.1不支持这一点。谢谢你。
<FunctionalCapabilities>
<FunctionalCapability Name="ID_FUNCCAP_EXTEND_MEM"/>
</FunctionalCapabilities>
if (string.IsNullOrWhiteSpace(contact.DisplayName))
{
continue;
}