Как определить, когда достигнут конец списка при прокрутке в прокрутке

У меня есть Scrollview следующим образом. Теперь, каков мой сценарий. Первоначально scrollviewr будет отображать 10 элементов. Когда полоса прокрутки достигает 10-го элемента, мне нужно реализовать некоторые функции. Теперь проблема в том, что я не могу распознать, когда полоса прокрутки достигает последнего элемента. Я пытался использовать событие ScrollChanged с вертикальным смещением, но, похоже, это не работает. Есть ли способ добиться этого.

                        <ScrollViewer x:Name="ChatListScrollViewer" Background="#ffffff" Grid.Column="0" ScrollChanged="ChatListScrolled" Focusable="False">
                        <VirtualizingStackPanel VerticalAlignment="Stretch">
                            <ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" Background="White" x:Name="MessageList"  ItemsSource="{Binding Source={StaticResource ChatList}}" Focusable="False" BorderBrush="Transparent" BorderThickness="0" HorizontalAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Hidden" x:FieldModifier="public">
                                <ItemsControl.GroupStyle>
                                    <GroupStyle>
                                        <GroupStyle.HeaderTemplate>
                                            <DataTemplate>
                                                <!-- Code -->
                                            </DataTemplate>
                                        </GroupStyle.HeaderTemplate>
                                    </GroupStyle>
                                </ItemsControl.GroupStyle>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel  Margin="0">
                                            <!-- Code -->
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </VirtualizingStackPanel>
                    </ScrollViewer>

РЕДАКТИРОВАТЬ: прокрутка снизу вверх для моего сценария. Это Как найти, что ScrollViewer прокручивается до конца в WPF? полезно для обнаружения последнего элемента при прокрутке вниз. В моем сценарии это похоже на приложение для чата. Когда полоса прокрутки прокручивается вверх и достигает последних сообщений, мне нужно получить еще некоторые данные.


person sahithi    schedule 08.06.2020    source источник
comment
Отвечает ли это на ваш вопрос? Как узнать, что ScrollViewer прокручивается до конец в WPF?   -  person Nawed Nabi Zada    schedule 08.06.2020
comment
Спасибо за ответ @NawedNabiZada, я пробовал это решение, но оно у меня не работает.   -  person sahithi    schedule 08.06.2020
comment
Возможно, отредактируйте свой вопрос и укажите, что не работает?   -  person Nawed Nabi Zada    schedule 08.06.2020
comment
С предложенным вами решением условие в scrollViewer.VerticalOffset == scrollViewer.ScrollableHeight не удалось. Когда я дошел до последнего элемента средства просмотра прокрутки, для параметра VerticalOffset установлено значение 48, а для ScrollableHeight — 890 000. Итак, условие не выполнено.   -  person sahithi    schedule 08.06.2020
comment
Если вы хотите узнать, прокручивается ли scrollViewer вверх, тогда вертикальное смещение равно 0.   -  person Nawed Nabi Zada    schedule 08.06.2020
comment
Прокручиваемое дно достигается, когда VerticalOffset == ScrollableHeight или альтернативно VerticalOffset == ExtentHeight - ViewportHeight. Верхняя прокручиваемая позиция — VerticalOffset == 0. Чего вы пытаетесь достичь? Если вы хотите реализовать виртуализацию пользовательского интерфейса, вы должны использовать ListBox или ListView вместо ItemsControl. Для обоих элементов управления списком виртуализация пользовательского интерфейса включена по умолчанию.   -  person BionicCode    schedule 09.06.2020
comment
Для виртуализации данных вы должны мыслить страницами, где каждая страница содержит n элементов. n должно быть не менее ScrollViewer.ViewportHeight или, скорее, VirtualizingPanel.CacheLength + ScrollViewer.ViewportHeight. Чтобы обеспечить плавную прокрутку, вы должны предварительно загрузить, например. следующая страница (страницы) до того, как текущая страница будет полностью видна. Элементы-пустышки предотвращают изменение размера средства просмотра прокрутки при добавлении новых элементов.   -  person BionicCode    schedule 09.06.2020