2011-11-03 70 views
0

尋找關於處理頁面導航的以下方案的評論。使用Mvvm Light Messenger以廣播方式發送消息,因此如果多頁解決方案中的所有ViewModel都收聽相同類型的消息,則每個消息都將收到所有消息。過濾掉當前ViewModel需要處理的部分是HandleIncomingMessage()WP7芒果頁面導航?

另外我想知道在哪裏存儲通過應用程序流動的「globalish」數據,使用了迄今爲止在App.xaml.cs中定義的靜態屬性currentCustomerId等等。但是,我是否也應該將來自數據庫的所有人員數據的對象圖表放在這裏?

另一種方法是擴展或重載PageTransitionMessageType()並提供屬性以向每個頁面發送特定的消息。通過這種方式,您不必擔心如何過濾上述的傳入消息。

任何意見讚賞!

//在ViewModelLocator

public static readonly Uri Page1Uri = new Uri("/Views/Page1.xaml", UriKind.Relative); 
public static readonly Uri Page2Uri = new Uri("/Views/Page2.xaml", UriKind.Relative); 
public static readonly Uri Page3Uri = new Uri("/Views/Page3.xaml", UriKind.Relative); 

//爲第2頁

創建類似頁面高清
public partial class Page1 : PhoneApplicationPage 
{ 
public Page1() 
{ 
    InitializeComponent(); 
    Messenger.Default.Register<PageTransitionMessageType>(this, (action) => NavigationHandler(action)); 

} 

private void NavigationHandler(PageTransitionMessageType action) 
{ 
    NavigationService.Navigate(action.PageUri); 
} 
} 

//爲第3頁

創建類似的VM
public class Page2ViewModel : ViewModelBase 
{ 
public Page2ViewModel() 
{ 
    Messenger.Default.Register<PageTransitionMessageType>(this, (s) => HandleIncomingMessage(s)); 
} 

private void HandleIncomingMessage(PageTransitionMessageType s) 
{ 
    // check for page2 message 
    if (s.PageUri == ViewModelLocator.Page2Uri) 
    { 
     // do cunning page2 stuff... 
    } 
} 
} 

//創建一個類似VM爲Page 2

public class Page1ViewModel : ViewModelBase 
{ 
public RelayCommand GotoPage2Cmd { get; private set; } 

public Page1ViewModel() 
{ 
    GotoPage2Cmd = new RelayCommand(() => ExecuteGoToPage2(),() => CanExecuteGoToPage2()); 
} 

private void ExecuteGoToPage2() 
{ 
    var message = new PageTransitionMessageType() { PageUri = ViewModelLocator.Page2Uri }; 
    Messenger.Default.Send<PageTransitionMessageType>(message); 
} 
}  


public class PageTransitionMessageType 
{ 
    public Uri PageUri { get; set; } 
    // e.g. put props with data you'd like to pass from one page to another here 

}  

回答

1

我建議在「」中保存「globalish」變量

+0

謝謝!已經離開這個項目一段時間了,但現在把事情整理一下了。 – Caad9

+0

讚賞讚賞:) –