Windows Phone 8: Как загрузить контент для каждого элемента сводной таблицы, используя MVVM?

Я использую Pivot Control в своем приложении. Я хочу загрузить содержимое каждого элемента сводки через удаленный URL-адрес (т. Е. С помощью веб-служб).

Например - у меня есть подробная сводная страница рецепта. У него есть 3 основных элемента - информация, обзоры, галерея. На панели задач есть индикатор прогресса.

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

Должен ли я использовать разные ViewModel для каждого элемента сводки или один MainViewModel для всех?

Как управлять видимостью индикатора Progress на странице Pivot?

Должен ли я создать UserControl для каждого элемента Pivot?

1 ответ

Решение

Роль страниц заключается в показе данных для одного "объекта", рецепта. Из-за этого я бы использовал только один RecipeViewModel, а также не стал бы создавать UserControls для элементов Pivot.

Вы можете использовать привязку для управления ProgressIndicator. Я лично использую BasePage, унаследованный от PhoneApplicationPage, где я создаю привязку в коде, например:

if (SystemTray.ProgressIndicator == null)
{
    var indicator = new ProgressIndicator { IsIndeterminate = true };
    var visibilityBinding = new Binding("ProgressBarIsActive");
    BindingOperations.SetBinding(indicator, ProgressIndicator.IsVisibleProperty, visibilityBinding);        
    SystemTray.SetProgressIndicator(this, indicator);

}

При этом вам просто нужно переключить свойство ProgressBarIsActive в вашей ViewModel.

Я бы использовал разные ViewModel для сводных элементов только тогда, когда сводные элементы являются независимыми (например: список рецептов, контактная информация, информация об одном сводном элементе).

Другие вопросы по тегам