2014-08-29 3 views
1

У меня возникла проблема со страницей моего приложения для хранения Windows 8.1, которое занимает много времени для рендеринга - это сетка с несколькими столбцами и строками, которая привязана к данным по загрузке стр. Это не загрузка медленных данных, а фактическое связывание данных с сеткой.Windows Store 8.1. XAML Progress Bar между страницами

Я в идеале хочу отобразить диалоговую панель, чтобы указать пользователю, что что-то загружается, и они нажали на предыдущую навигационную кнопку в порядке.

Я видел, как кто-то упоминал о возможности наличия «загрузочной страницы», в которой есть только индикатор выполнения, и я думал, что это решение может работать, но я не могу решить, в каком случае страницы загрузки я должен перемещаться на фактическую страницу.

т.е. Пользователь нажимает кнопку, которая вызывает

this.Frame.Navigate(typeof(LoadingPage)); 

Загрузка страницы отображается индикатор

Я знаю, что нужно, чтобы быть в состоянии назвать

this.Frame.Navigate(typeof(ActualPage)); 

пользователь видит индикатор прогресса в то время как Фактические нагрузки.

Любые предложения были бы очень благодарны спасибо!

+0

Считаете ли вы использование сетки? Зависит от вашей модели данных, но gridview имеет встроенную тактику виртуализации пользовательского интерфейса для постепенного загрузки объектов. –

ответ

1

Благодаря поддержке команды на DevExpress у меня есть решение моей проблемы.

Во-первых, на странице, которая занимает много времени, чтобы загрузить я обмотал сетку в ContentControl

<ContentControl Visibility="Collapsed" Name="Content"> 
    <!-- Grid in here --> 
</ContentControl> 

Затем я добавил TextBlock, который я буду использовать, чтобы отобразить «Загрузка ...» на моей странице. Я назвал этот контрольный индикатор.

<TextBlock x:Name="indicator" Text="Loading..." /> 

Я приложил следующий метод нагруженного события страницы, которая использует таймер

void MainPage_Loaded(object sender, RoutedEventArgs e) 
{ 

    indicator.Visibility = Windows.UI.Xaml.Visibility.Visible; 
    DispatcherTimer t = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) }; 
    t.Tick += (dd, ee) => 
    { 
     t.Stop(); 
     Content.Visibility = Windows.UI.Xaml.Visibility.Visible; 
    }; 
    t.Start(); 
} 

Тогда, когда GridControl загрузила я скрыть индикатор TextBlock

void gridControl_Loaded(object sender, RoutedEventArgs e) 
{ 
    indicator.Visibility = Windows.UI.Xaml.Visibility.Collapsed; 
} 

Этот отлично работает для меня. Я не могу использовать элемент управления Windows 8 ProgressBar, потому что анимация загружается в тот же поток, который загружает сетку, но я достаточно счастлив, чтобы иметь какой-либо индикатор.

Также благодарит Брайана Стампа за то, что указал мне в правильном направлении.

0

Во-первых, я предлагаю использовать ListView или GridView для отображения ваших объектов привязки данных из-за встроенной виртуализации пользовательского интерфейса.

Однако, возможно, это сработает для вашей ситуации.

Знаете ли вы, когда ваша страница готова к отображению? Если это так, поместите контрольное кольцо перед вашей сеткой, пока оно загружается в фоновом режиме.

<Grid x:Name="FullPageGrid"> 
     <Grid x:Name="YourGridContent"> 

     </Grid> 
     <Grid Background="White" Visibility="Visible" x:Name="ProgressRingGrid"> 
      <ProgressRing IsActive="True"></ProgressRing> 
     </Grid> 
</Grid> 

Когда данные полностью загружены, изменить видимость «ProgressRingGrid» обзорности = «обрушилась»

+0

Спасибо за предложения, к сожалению, это третья сторона управления сеткой, поэтому я не могу воспользоваться параметрами виртуализации. Я связался с третьей стороной, чтобы узнать, есть ли у них какие-либо предложения. – RCairns

+0

Кроме того, насколько я знаю, я не думаю, что у меня есть какой-то способ узнать, что страница закончила загрузку - это было бы прекрасно, если бы было какое-то событие, которое могло бы срабатывать, как только все будет загружено. Затем я установил бы видимость сетки на Collapsed, чтобы сначала загрузить страницу, а пользователь увидел, что они прошли навигацию, а затем изменит видимость сетки после этого. Я играю с идеей даже делать это по таймеру. – RCairns

+0

Вы используете шаблон данных для установки объектов в сетке? Каждый элемент структуры будет иметь событие «Loaded», к которому вы можете присоединить обработчик событий. Если вы можете найти последний элемент, который будет загружаться, измените видимость в обработчике событий. –

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