2013-04-11 2 views
0

после того, как вас много гугли, наконец, я собираюсь спросить об этом вам, ребята.
i'v создано scrollviewer, содержащий предметы (listboxItems) и эти изделия из webservices. но сразу можно получить только 5 предметов. поэтому изначально это будет 5 пунктов, то следующие 5 (прилагаются к scrollviewer), а затем следующему 5 и так далее ......метод огня (вызова), когда scrollviewer прокручивается до конца

примечание: -вот listBoxitems используется внутри scrollviewer, а не ListBox

данные извлекаются изwebserviceтакже содержит --->

total items 
numResults (current number of items fetched) 

теперь, мой метод для извлечения данных в --->

getData(int nextResult) 
{ 
     // some code to fetch the data 
} 

где NextResult находится рядом номер пункта (например: - NextResult 6, при запросе 2-й раз)

, но я не смог написать код для обнаружения, что пользователь прокручиваются в ScrollViewer до конца & затем метод, который будет называться или уволен, что бы ни говорили!

i'v был сильно смущен среди ScrollViewer-х VerticalOffset, ExtentHeight, ViewportHeight, ScrollableHeight и т.д., собирается использовать их & CALCulate требуемой информации для достижения вышеуказанных требований.

, так что если кто-нибудь знает о том же или использованном когда-либо прокручивающем, то, пожалуйста, напишите ответ.

ответ

1

Я достиг этого путем регистрации нового DependencyProperty ListVerticalOffset с соответствующим событием:

// Constructor 
    public MainPage() 
    { 
     InitializeComponent(); 

     ListVerticalOffsetProperty = DependencyProperty.Register("ListVerticalOffset", typeof(double), typeof(MainPage), new PropertyMetadata(OnListVerticalOffsetChanged)); 

     YourScrollViewer.Loaded += YourScrollViewer_Loaded; 
    } 

    void YourScrollViewer_Loaded(object sender, RoutedEventArgs e) 
    { 
     var binding = new Binding 
      { 
       Source = YourScrollViewer, 
       Path = new PropertyPath("VerticalOffset"), 
       Mode = BindingMode.OneWay 
      }; 
     SetBinding(ListVerticalOffsetProperty, binding); 
    } 

    private void OnListVerticalOffsetChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e) 
    { 
     var atBottom = YourScrollViewer.VerticalOffset >= YourScrollViewer.ScrollableHeight; 
     if (atBottom) MessageBox.Show("End"); 
    } 

    public readonly DependencyProperty ListVerticalOffsetProperty; 

    public double ListVerticalOffset 
    { 
     get { return (double)GetValue(ListVerticalOffsetProperty); } 
     set { SetValue(ListVerticalOffsetProperty, value); } 
    } 

Может быть, это решение или его реализация не является оптимальным, но это работает для меня.

+0

thanx @Lumen, его работа! –

+0

Hi Lumen, ваше решение также работает для меня, однако у меня есть 2 списка на одной странице панорамы, поэтому я зарегистрировал 2 версии вашего кода выше, однако 2 списка смешают данные, которые они получают, как я могу связать свойство зависимостей со списком? – Bohrend

Смежные вопросы