这是我的MVVM代码。这是对的吗?

时间:2012-02-20 05:46:59

标签: windows-phone-7

public Page2()
    {
        InitializeComponent();

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

我想:

我们知道MVVM获取QueryString是如此困难。所以,如果我收到PhoneApplicationPage,我可以获得NavigationContext和NavigationService。通过这种方式,我可以通过NavigationContext获取QueryString.i可以通过NavigationService导航。但是,我不知道这种方式是MVVM吗?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

查看Caliburn Micro。导航服务将为您解析值,如果目标viewmodel上存在属性,它将填充它们。

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