2011-06-06 59 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; 
     } 
相關問題