Windows 10 Listbox不断重复第一项

Windows 10 Listbox不断重复第一项,windows-10,uwp,uwp-xaml,Windows 10,Uwp,Uwp Xaml,我有一个加载项的简单列表框(在我的测试用例135中)。 我记录了加载的项目的所有ID,它们都有一个唯一的ID。listbox datatemplate是一个usercontrol,因此在usercontrol中我还记录了ID,以查看加载了哪些项目 <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem"> <Setter Property="HorizontalContentAlignment"

我有一个加载项的简单列表框(在我的测试用例135中)。 我记录了加载的项目的所有ID,它们都有一个唯一的ID。listbox datatemplate是一个usercontrol,因此在usercontrol中我还记录了ID,以查看加载了哪些项目

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>
现在是它开始出错的地方,它只加载前10项(我认为最初可见的内容),然后一遍又一遍地重复这些第一项。因此,我没有135个唯一的对象,而是135个对象,它们是前10个左右加载的对象之一

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>
您可以在此处看到日志记录(还有很多ID不可见):

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>
在用户控件ID行之后,这是它加载的唯一ID,并不断循环这10个ID,直到列表框中有135个项目

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>
这是整页代码

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>
在加载的UserControl页面中,我也记录了它们

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>
在这个屏幕截图中,你可以看到我向下滚动,它开始再次重复相同的项目(有时会出错,因为你可以看到第一个项目没有正确重复,它是另一个)

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>
请注意,在我添加的名称前面,您可以看到它重复相同的ID(例如绿色相册:1301162),即使在我设置为ItemsSource的列表中,它只存在一次(所有项目都是唯一的)

    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>

提供解决方案的注释,在“准确解决了我的问题”中的答案。

提供解决方案的注释,在“准确解决了我的问题”中的答案。

如何打印ID?在哪个控件的哪个事件中?我用ID的日志编辑了第一篇文章。它发生在主页加载的页面以及用户控件中(即您在“--user control ID's--”之后看到的页面)。您可以分享有关“Helpers.GetWantList()”和“Variables.WantsAll”的更多详细信息吗?它们是什么类型的?另外,您可以在绑定的地方尝试一个简单的测试,或者将lbResults.ItemsSource分配给列表或IEnumerable。listbox确实在使用虚拟化,所以如果您的WantsAll对象没有正确实现IEnumerable,那么会发生什么情况。可能是模板的问题。尝试使用ListBoxItem的标准模板您能否共享一个可以重现您的问题的模板?正如@AlexDrenea所说,这可能与ListBox的虚拟化有关。类似的情况可能会对你有所帮助。你如何打印身份证?在哪个控件的哪个事件中?我用ID的日志编辑了第一篇文章。它发生在主页加载的页面以及用户控件中(即您在“--user control ID's--”之后看到的页面)。您可以分享有关“Helpers.GetWantList()”和“Variables.WantsAll”的更多详细信息吗?它们是什么类型的?另外,您可以在绑定的地方尝试一个简单的测试,或者将lbResults.ItemsSource分配给列表或IEnumerable。listbox确实在使用虚拟化,所以如果您的WantsAll对象没有正确实现IEnumerable,那么会发生什么情况。可能是模板的问题。尝试使用ListBoxItem的标准模板您能否共享一个可以重现您的问题的模板?正如@AlexDrenea所说,这可能与ListBox的虚拟化有关。并且是一个类似的案例可能会帮助你。
    <Style x:Key="ListBoxItemStyle1" TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch"/>

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <Border x:Name="LayoutRoot" BorderThickness="3">

                        <ContentControl x:Name="ContentContainer" 
                            VerticalContentAlignment="Top" 
                            HorizontalContentAlignment="{TemplateBinding HorizontalContentAlignment}"  
                            Margin="{TemplateBinding Padding}" 
                            Content="{TemplateBinding Content}" 
                            ContentTemplate="{TemplateBinding ContentTemplate}" 
                            Foreground="{TemplateBinding Foreground}" />
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Page.Resources>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <SearchBox x:Name="sbSearch" QuerySubmitted="sbSearch_QuerySubmitted" Margin="12,12,12,0"></SearchBox>


        <ListBox x:Name="lbResults" Grid.Row="1" ItemContainerStyle="{StaticResource ListBoxItemStyle1}" Background="{x:Null}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <userControls:WantlistItem Tag="{Binding}"></userControls:WantlistItem>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>
</Grid>