2012-02-20 77 views
0
public Page2() 
    { 
     InitializeComponent(); 

     Loaded += (sender, e) => 
      { 
       DataContext = new Page2ViewModel(this); 
      }; 
    } 

我想:這是我的MVVM代碼。這是對的嗎?

我們知道MVVM得到查詢字符串是如此困難。所以,如果我得到PhoneApplicationPage引用,我可以得到NavigationContext和NavigationService。通過這種方式,我可以通過NavigationContext.i獲取QueryString,可以通過NavigationService進行導航。但是,我不知道這種方式是MVVM嗎?

回答

1

不,這不是100%MVVM。你的應用程序不需要100%的MVVM。您的ViewModel不應直接與視圖對話。如果需要,您可以讓ViewModel將事件發送到您的視圖。

此外,您不需要在Loaded事件中設置DataContext。

private Page2ViewModel _Page2ViewModel; 
public Page2() 
{ 
    InitializeComponent(); 
    _Page2ViewModel = new Page2ViewModel(); 
    DataContext = Page2ViewModel; 
} 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    string key = string.Empty; 
    if (NavigationContext.QueryString.ContainsKey("key")) 
     string key = NavigationContext.QueryString["key"]; 

    _Page2ViewModel.UpdateKey(key); 
} 
0

查看Caliburn Micro。導航服務將解析出您的值,如果目標視圖模型上存在屬性,它將填充它們。

public class MainPageViewModel { 
    readonly INavigationService navigationService; 

    public MainPageViewModel(INavigationService navigationService) { 
     this.navigationService = navigationService; 
    } 

    public void GotoPageTwo() { 
     navigationService.UriFor<PivotPageViewModel>() 
      .WithParam(x => x.NumberOfTabs, 5) 
      .Navigate(); 
    } 
}