2012-02-20 76 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(); 
    } 
}