Подход к разработке MVVM Light Toolkit (навигация и просмотр) - PullRequest
1 голос
/ 06 июня 2011

Я создаю простое приложение с 4-5 представлениями в Silverlight.Я наткнулся на инструментарий MVVM Light и думаю, что он мне подходит.

Фон

Приложение будет иметь виды с типичным списком и подробным отображением

  • Производитель
  • Продукт

и т. Д. С левой навигацией, верхним и нижним колонтитулами (пользовательские элементы управления).

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

Проблема

При выборе ссылок из левого навигационного элемента управления центральная панель должна быть обновлена ​​в другом представлении (например, Производитель, продукт ии так далее)

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

Вопрос

Как я могу разработать свое приложениес легким инструментарием MVVM.Центральная панель должна быть загружена с другим представлением во время выполнения.

Я особенно обращаю внимание на помощь в реализации навигационной части приложения.

Спасибо.

1 Ответ

1 голос
/ 06 июня 2011

Я должен был реализовать базовую нагивацию НЕ МВВМ способом.У меня есть прослушиватель сообщений, сидящий на конструкторе моего основного представления, который прослушивает сообщение навигации по странице (пользовательское сообщение изучает его, любит его, использует его), а затем устанавливает источник содержимого фрейма навигации на URL-адрес, отправляемый всообщение.У меня есть URL-адреса для всех настроек навигации моей страницы и подстраницы с использованием строковых констант.

public MainPage()
        {
            InitializeComponent();
            Loaded += OnLoaded;
            WebContext.Current.Authentication.LoggedOut +=
                new EventHandler<System.ServiceModel.DomainServices.Client.ApplicationServices.AuthenticationEventArgs>(Authentication_LoggedOut);
            Messenger.Default.Register<msgs.NavigationRequest<PageURI>>(this, (uri => ContentFrame.Navigate(uri.Content)));
            Messenger.Default.Register<WavelengthIS.Core.Messaging.ExceptionMessage>(this, ex => ShowExceptionMessage(ex));
            Messenger.Default.Register<WavelengthIS.Core.Messaging.StringMessage>(this, str => ShowMessageForUser(str));

        }


public class PageURI : Uri
    {
        public PageURI(string uriString, UriKind uriKind)
            : base(uriString, uriKind)
        {

        }


    }


public class PageLinks
    {
        public const string SEARCHBYDAYCOUNTVIEW = "/Views/PatientSearchHeaders/SearchByDayCountView.xaml";
        public const string SEARCHBYPATIENTCRITERIAVIEW = "/Views/PatientSearchHeaders/SearchByPatientCriteriaView.xaml";
        public const string QUESTIONAIRRESHELL = "/Views/QuestionairreViews/QuestionairreShell.xaml";
        public const string HOME = "/Views/PrimarySearchView.xaml";
        public const string REPORTS = "/Views/ReportsPage.xaml";
        public const string LOGINPAGE = "/Views/LoginPageView.xaml";
    }

Фактический вызов в ВМ:

private void OnSurveyCommandExecute()
        {
            Wait.Begin("Loading Patient List...");
            _messenger.Send<ReadmitPatientListViewModel>(this);
            _messenger.Send<Messages.NavigationRequest<SubClasses.URI.PageURI>>(GetNavRequest_QUESTIONAIRRESHELL());

        }

        private static Messages.NavigationRequest<SubClasses.URI.PageURI> GetNavRequest_QUESTIONAIRRESHELL()
        {
            Messages.NavigationRequest<SubClasses.URI.PageURI> navRequest =
                new Messages.NavigationRequest<SubClasses.URI.PageURI>(
                    new SubClasses.URI.PageURI(Helpers.PageLinks.QUESTIONAIRRESHELL, System.UriKind.Relative));
            return navRequest;
        }
...