应用数据模板时Listview虚拟化失败

时间:2014-08-25 11:17:10

标签: wpf winrt-xaml windows-8.1 windows-phone-8.1

我可以在Listview中显示大量项目。

但是,当我应用DataTemplate时,listsview不会显示任何项目。

这有效:

<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>

一旦应用绑定,使用数据模板显示列表视图项似乎失败。 我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我的列表显示了几个空字符串的项目。

由于此列表按升序排序,显示空文本的项目显示在列表的开头,而其他项目确实存在但不在滚动查看器的视口中。

结果我这样做了:

foreach (var contact in phoneContacts)
{
    if (string.IsNullOrWhiteSpace(contact.DisplayName))
    {
        continue;
    }
.
.
.
 }