列表框不断重复第一项
Listbox keeps repeating first items
我有一个加载项目的简单列表框(在我的测试用例 135 中)。
我记录了所有加载的项目的 ID,它们都有一个唯一的 ID。列表框数据模板是一个用户控件,因此在用户控件中我还记录了 ID 以查看加载了哪些。
现在开始出错了,它只加载大约前 10 个项目(我认为最初是可见的),然后一遍又一遍地重复这些第一个项目。因此,我有 135 个对象,而不是 135 个唯一对象,它们是前 10 个左右加载的对象之一。
你可以在这里看到日志记录(还有很多ID不可见):
在用户控件 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>
我做错了什么?
Edit1:在主页中加载列表框
private void Page_Loaded(object sender, RoutedEventArgs e)
{
if(Variables.WantsAll == null) Helpers.GetWantList();
foreach (var v in Variables.WantsAll)
{
Debug.WriteLine(v.id);
}
Debug.WriteLine("--- USER CONTROL ID's ---");
lbResults.ItemsSource = Variables.WantsAll;
}
在用户控件中 Page_Loaded 我也在记录它们。
在此屏幕截图中,您可以看到我向下滚动,它再次开始重复相同的项目(有时它会搞砸,因为您可以看到第一个项目没有正确重复,它是不同的)。
请注意,在名称前面我添加了它打印出的 ID,您可以看到它重复了相同的 ID(例如绿色相册:1301162),即使在我设置为 ItemsSource 的列表中它也只存在一次(所有项目都是唯一的)。
Jay Zuo - MSFT provided the solution, the answer in 的评论完全解决了我的问题。
我有一个加载项目的简单列表框(在我的测试用例 135 中)。 我记录了所有加载的项目的 ID,它们都有一个唯一的 ID。列表框数据模板是一个用户控件,因此在用户控件中我还记录了 ID 以查看加载了哪些。
现在开始出错了,它只加载大约前 10 个项目(我认为最初是可见的),然后一遍又一遍地重复这些第一个项目。因此,我有 135 个对象,而不是 135 个唯一对象,它们是前 10 个左右加载的对象之一。
你可以在这里看到日志记录(还有很多ID不可见):
在用户控件 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>
我做错了什么?
Edit1:在主页中加载列表框
private void Page_Loaded(object sender, RoutedEventArgs e)
{
if(Variables.WantsAll == null) Helpers.GetWantList();
foreach (var v in Variables.WantsAll)
{
Debug.WriteLine(v.id);
}
Debug.WriteLine("--- USER CONTROL ID's ---");
lbResults.ItemsSource = Variables.WantsAll;
}
在用户控件中 Page_Loaded 我也在记录它们。
在此屏幕截图中,您可以看到我向下滚动,它再次开始重复相同的项目(有时它会搞砸,因为您可以看到第一个项目没有正确重复,它是不同的)。
请注意,在名称前面我添加了它打印出的 ID,您可以看到它重复了相同的 ID(例如绿色相册:1301162),即使在我设置为 ItemsSource 的列表中它也只存在一次(所有项目都是唯一的)。
Jay Zuo - MSFT provided the solution, the answer in