2011-06-06 96 views
1

我在Silverlight中构建了一个具有4-5个视图的简单应用程序。我遇到了MVVM Light工具包,我认为它适合我的需要。MVVM Light工具包设计方法(导航和视图加载)

背景

应用将具有典型的列表视图和细节显示

  • 厂商
  • 产品

等左导航,页眉和页脚(用户控制)。

我想在设计时创建一个带有用户控件的主页面。

问题

基于从左侧导航控制链接选择时,中央面板应具有不同的视图(如制造商,产品等)

更新我明白Messenger是一个选项在轻型工具包中的不同虚拟机之间进行通信。

问题

我如何设计我的MVVM光工具包的应用程序。中央窗格需要在运行时加载不同的视图。

我特别在帮助实现应用程序的导航部分。

谢谢。

回答

1

我不得不以NON mvvm方式实现基本的漫游。我有一个消息监听器坐在我的主视图的构造函数中,它侦听页面导航消息(自定义消息学习它,喜欢它,使用它),然后它将导航框架的内容源设置为在信息。我有我的页面和子页面导航设置使用字符串常量的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"; 
    } 

实际调用VM:

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; 
     }