Доступ к Pivot Control из App.xaml.cs - PullRequest
1 голос
/ 09 февраля 2012

В моем MainPage.xaml я создал элемент управления Pivot: <controls:Pivot Title="Powder God" Name="PivotControl">.

Мое первое сводное представление - это HubTile, которое суммирует все другие отдельные страницы. Поэтому моя панель приложения будет отличаться между первым сводным представлением и всеми остальными.

Вот почему я помещаю панель приложения в раздел ресурсов App.xaml, а затем загружаюсь на основе выбранного индекса моего стержня.

Мой вопрос:

В панели приложения, которую я буду использовать для всех отдельных страниц, я хочу иметь опцию delete , где я буду удалять этот конкретный элемент (модель представления) из контекста данных.

Я знаю, что могу использовать PhoneApplicationFrame root = Application.Current.RootVisual as PhoneApplicationFrame; для доступа к службам навигации, но я не знаю, как я могу сослаться на свою сводку, чтобы я мог получить выбранный индекс и продолжить работу.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

На одном уровне предложение Microsoft о включении ApplicationBar в App.xaml замечательно, так как на него можно ссылаться отовсюду, и, по-видимому, это поощряет повторное использование кода: однако этот вопрос подчеркивает ограничение этого подхода.Панель приложения обычно используется для предоставления действий, относящихся к текущей странице (или элементу поворота), и только потому, что кнопки одинаковы, может не потребоваться, чтобы в каждом случае выполнялся один и тот же код.

Вв этом случае я думаю, что было бы лучше создать фабричный метод, который создает ваш общий ApplicationBar с обработчиками щелчков, которые вы указываете конкретно для вашей страницы / сводного элемента.Для получения бонусных баллов поместите метод в новый класс (не App), чтобы он не терялся во всем коде шаблона.Вызовите этот метод фабрики в конструкторе страниц и запомните свой ApplicationBar в своем классе.Для нескольких панелей приложений создайте их все сразу, и вы можете легко переключаться между этими панелями приложений в своем коде Pivot SelectionChanged.

Альтернатива создания панели приложений в App.xaml и последующего извлечения ее из App.xaml.cs "Ресурсы" ResourceDictionary в коде, модифицирующие обратные вызовы кликов, на мой взгляд, более сложны.

Хотелось бы, чтобы они проделали лучшую работу по реализации ApplicationBar, чтобы люди не захотелисделай это.Я обнаружил, что использование ApplicationBar заставляет вас добавлять код в Page.xaml.cs, даже если вы используете такую ​​среду, как MVVM Light.Это все еще нормально в MVVM, поскольку это специфичный для пользовательского интерфейса код, который принадлежит представлению, но это делает вещи непоследовательными, если вы используете ICommand везде.В прошлый раз я решил, что лучше всего создать ApplicationBar в коде, чем взламывать подобные вещи с помощью App.xaml.cs.

Обновление: Есть запрос UserVoiceдля привязываемых данных ApplicationBar .

3 голосов
/ 09 февраля 2012

Используя MVVM, вы НЕ ДОЛЖНЫ делать этого:

((PageType)Application.Current.RootVisual).PivotControl. //Blah

PageType - это тип PhoneApplicationFrame, который содержит ваш PivotControl. Если это не работает, вам нужно свойство в RootVisual

PAGE

public Pivot MyPivot
{
    get 
    {
        return PivotControl;
    }
}

APP

((PageType)RootVisual).MyPivot. //Blah
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...