У меня есть простой список, который загружает элементы (в моем тестовом примере 135). Я зарегистрировал все идентификаторы загружаемых элементов, и все они имеют уникальный идентификатор. Элемент данных listbox - это usercontrol, поэтому в usercontrol я также зарегистрировал идентификаторы, чтобы увидеть, какие из них загружены.Listbox продолжает повторять первые позиции
Теперь он начинает ошибаться, он загружает только первые 10 предметов (я думаю, что изначально видно), а затем снова и снова повторяет эти первые предметы. Поэтому вместо 135 уникальных объектов у меня есть 135 объектов, которые являются одним из первых 10 или около того.
Вы можете увидеть регистрацию здесь (там намного больше ID не виден):
После линии управляющего пользователем идентификаторов, что это загружает только ID и сохраняет не зацикливание этих 10 идентификаторов до в списке есть 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: Загрузка ListBox на главной странице
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;
}
В UserControl Page_Loaded я их регистрации, а также.
На этом скриншоте вы видите, что я прокрутил вниз, и он снова начинает повторять одни и те же предметы (иногда это испортится, так как вы можете видеть, что первый элемент неправильно повторяется, он другой).
Обратите внимание, что перед именами я добавил идентификатор, который он распечатывает, вы можете видеть, что он повторяет одинаковые идентификаторы (например, зеленый альбом: 1301162), даже в списке, который я установил как ItemSource, он существует только один раз (все предметы уникальны).
Как вы печатаете идентификаторы? В каком случае контроля? –
Я отредактировал первое сообщение с регистрацией идентификаторов. Это происходит в Page_Loaded на главной странице и в пользовательском элементе управления (это те, которые вы видите после «--- ИДИТЕ КОНТРОЛЯ ПОЛЬЗОВАТЕЛЯ ---») – vixez
Можете ли вы поделиться более подробной информацией о «Helpers.GetWantList»() "и" Variables.WantsAll "? какие они? Кроме того, вы можете попробовать простой тест, где вы привязываетесь, или назначить lbResults.ItemsSource для списка <> или IEnumerable <>. Список действительно использует виртуализацию, поэтому, если ваш объект WantsAll не реализует IEnumerable правильно, что произойдет. – AlexDrenea