我观察到,当项目数超过400项时,我的应用程序中的Listview无法显示listview项目的文本。
我的猜测是这是手机的内存问题,而不是带有更大设备的模式。
我假设我只需要添加我的listview项目源所基于的项目的一小部分。
管理负责显示大量数据的列表视图的最佳方法是什么?
这是我的XAML:
<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 x:Name="ContactList" ItemsSource="{Binding SelectedCategory.Contacts}"
Height="425"
Width="425"
Margin="58,175,0,0" Canvas.ZIndex="99"
Background="Transparent" Foreground="#FF333747"
VerticalAlignment="Top" HorizontalAlignment="Left">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Border>
<ScrollViewer>
<ItemsPresenter/>
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="Hello Wworld" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
这不是
<ListView x:Name="ContactList" ItemsSource="{Binding SelectedCategory.Contacts}"
Height="425"
Width="425"
Margin="58,175,0,0" Canvas.ZIndex="99"
Background="Transparent" Foreground="#FF333747"
VerticalAlignment="Top" HorizontalAlignment="Left">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.Template>
<ControlTemplate TargetType="ItemsControl">
<Border>
<ScrollViewer>
<ItemsPresenter/>
</ScrollViewer>
</Border>
</ControlTemplate>
</ItemsControl.Template>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding DisplayName}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ListView>
一旦应用绑定,使用数据模板显示列表视图项似乎失败。 我该如何解决这个问题?
答案 0 :(得分:0)
答案 1 :(得分:0)
请记住,这是一部手机,为什么您要在列表中首先选择400多个项目?想一想用户将如何处理这些数据 如果你有超过400个项目,那么你应该有一些选择来缩小它们。也许你可以拥有结果“页面”,并将它们捆绑在一个易于消化的数字中,无论是对于手机,还是更重要的是用户。
话虽如此,除了 Rang 的回答之外,您还可以尝试为应用程序分配更多内存。看看this post,但具体来说:
<FunctionalCapabilities>
<FunctionalCapability Name="ID_FUNCCAP_EXTEND_MEM"/>
</FunctionalCapabilities>
答案 2 :(得分:0)
我的列表显示了几个空字符串的项目。
由于此列表按升序排序,显示空文本的项目显示在列表的开头,而其他项目确实存在但不在滚动查看器的视口中。
结果我这样做了:
if (string.IsNullOrWhiteSpace(contact.DisplayName))
{
continue;
}