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 для сводных элементов только тогда, когда сводные элементы являются независимыми (например: список рецептов, контактная информация, информация об одном сводном элементе).