Событие ListBox OnSelectionChanged перестает работать со «многими» элементами - PullRequest
0 голосов
/ 16 января 2011

Я заметил очень странное поведение: В моем Windows Phone 7 у меня есть ListBox, который может содержать от 1-2 до 2-300 элементов. Я заметил, что когда количество элементов большое (не уверен в количестве, но наверняка> 150 элементов), событие OnSelectionChanged не вызывается.

Это XAML моего списка

<ListBox ItemsSource="{Binding Path=Posts}" ItemTemplate="{StaticResource IconsWithText}"
        ScrollViewer.VerticalScrollBarVisibility ="Disabled"
        SelectionChanged="ListBox_SelectionChanged" >
    <ListBox.ItemsPanel>
        <ItemsPanelTemplate>
            <StackPanel Orientation="Horizontal" />
        </ItemsPanelTemplate>
    </ListBox.ItemsPanel>
</ListBox>

И шаблон для ItemTemplate:

<DataTemplate x:Name="IconsWithText">
    <Grid x:Name="ThumLink"  Width="160" Height="140" Margin="10" Background="#FF666666">
        <Image Source="Resources/Images/All.png" Visibility="{Binding Path=VisibilityAll}" />
        <Image delay:LowProfileImageLoader.UriSource="{Binding Picture}"
                Visibility="{Binding Path=VisibilityPic}"
                Stretch="UniformToFill" VerticalAlignment="Top" HorizontalAlignment="Left" />
        <Border x:Name="border" VerticalAlignment="Bottom" Background="#d9ffffff" Height="62" BorderBrush="Black" Visibility="{Binding Path=VisibilityPic}"  >
            <TextBlock x:Name="textBlock" Text="{Binding Title}" VerticalAlignment="Top" TextWrapping="Wrap" MaxHeight="60" Style="{StaticResource PhoneTextSmallStyle}"
                Foreground="Black" FontSize="20" Margin="4,1,4,0" Height="62"/>
        </Border>
    </Grid>
</DataTemplate>

Это ошибка или я что-то не так сделал? Я был в отладке, и обработчик событий никогда не вызывался, но он работает, когда элементов не так много.

Simone

1 Ответ

1 голос
/ 16 января 2011

Проблема с использованием простого StackPanel заключается в том, что весь визуальный объект будет создан и добавлен в StackPanel, что будет очень дорого с точки зрения памяти и может сработать в других пределах в системе рендеринга.

Попробуйте изменить на: -

<VirtualisingStackPanel Orientation="Horizontal" />

Пока что я не смог воспроизвести вашу проблему с 300 предметами, даже используя обычную StackPanel.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...