Добавить кнопку «Загрузить еще» в конце ListBox без потери виртуализации? - PullRequest
4 голосов
/ 13 декабря 2011

Я знаю, что, отредактировав стиль ListBox по умолчанию, вот так, у меня может быть Button в самом конце ListBox.

<ScrollViewer x:Name="ScrollViewer" ...> 
    <StackPanel>
        <ItemsPresenter />
        <Button />
    </StackPanel>
</ScrollViewer> 

Однако выполнение этого приведет к поломкеListBox Виртуализация и время рендеринга становятся действительно длинными.

Все, что я могу думать, это

  1. Создать фиктивный элемент и добавить его в конец моего элементаколлекции в viewmodel, и иметь свойство Visibility в фиктивном объекте с именем ButtonGridVisibility и установить его на Visibility.Visible.
  2. В ItemTemplate моего ListBox, естьдва Grids.Один отображает нормальное расположение элементов, другой отображает Загрузить еще Button.Затем переключите их Visibility на основе свойства ButtonGridVisibility .

Это может сработать, но мне просто интересно, есть ли более простой / лучший способ?

Ответы [ 2 ]

3 голосов
/ 17 ноября 2012

Я знаю, что это старый пост, но в случае, если некоторые люди наткнуться на это:

Существует элемент управления LongListSelector , доступный "из коробки" в WP8 или как часть Windows Phone Toolkit для WP7, который поддерживает этот сценарий довольно аккуратно. Если вы хотите добавить определенный контент после последнего элемента (или перед первым элементом), вы можете просто установить ListFooter или ListHeader элемента управления. Вы можете поместить любой контент внутрь, и этот контент будет прокручиваться соответственно вместе с остальными элементами.

Так что для WP7 это будет выглядеть так:

<toolkit:LongListSelector ItemsSource="{Binding Items}">
    <toolkit:LongListSelector.ListFooter>
        <Grid>
            <Button />
        </Grid>
    </toolkit:LongListSelector.ListFooter>
</toolkit:LongListSelector>

, где toolkit равно xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"

1 голос
/ 13 декабря 2011

В эти дни есть множество дополнительных функций, которые могут помочь в этом сценарии.Одним из них является добавление дополнительных визуальных состояний в ScrollViewer, добавление групп визуальных состояний «HorizontalCompression» и «VerticalCompression».Используя их и подключаясь к событию CurrentStateChanging, вы можете загружать больше элементов по мере необходимости.

Полную информацию о том, как реализовать это, можно найти на Silverlight для Windows Phone PerformanceБлог команды.

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