То, что я пытаюсь сделать, это загрузить как можно больше строк в элементе управления wpf datagrid, пока он не переполнится (виден вертикальный scrollviewer).Вот мой код:
ScrollViewer GetScrollViewer(UIElement element)
{
if (element == null) return null;
ScrollViewer retour = null;
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(element) && retour == null; i++)
{
if (VisualTreeHelper.GetChild(element, i) is ScrollViewer)
{
retour = (ScrollViewer)(VisualTreeHelper.GetChild(element, i));
}
else
{
retour = GetScrollViewer(VisualTreeHelper.GetChild(element, i) as UIElement);
}
}
return retour;
}
private void M_vm_LoadUserCompleted(int resultCount)
{
ScrollViewer sv = GetScrollViewer(lst);
if (sv == null)
{
return;
}
if (sv.ComputedVerticalScrollBarVisibility != Visibility.Visible &&
resultCount > 0)
{
// Load more.
m_vm.LoadMoreCommand.Execute(null);
}
}
M_vm_LoadUserCompleted
будет вызван после успешного запроса к серверу REST API.В настоящее время он выбирает 15 строк по одному запросу (ограничено внутренним сервером).Это решение действительно работает, пока я не помещу его в элемент управления с вкладками.Так что проблема в том, что свойство sv.ComputedVerticalScrollBarVisibility
никогда не превращается в Visible
, когда я переключаюсь на другую вкладку.Поэтому вместо загрузки данных до тех пор, пока сетка данных не «переполнится», она продолжает работать, поэтому загружает все данные (тысячи строк) в мое приложение, что приводит к очень плохому пользовательскому интерфейсу.Является ли это ожидаемым поведением scrollviewer, когда текущая вкладка, содержащая scrollviewer, не выбрана?Как преодолеть эту проблему.Любая помощь высоко ценится.Спасибо.