public Page2()
{
InitializeComponent();
Loaded += (sender, e) =>
{
DataContext = new Page2ViewModel(this);
};
}
我想:
我们知道MVVM获取QueryString是如此困难。所以,如果我收到PhoneApplicationPage,我可以获得NavigationContext和NavigationService。通过这种方式,我可以通过NavigationContext获取QueryString.i可以通过NavigationService导航。但是,我不知道这种方式是MVVM吗?
答案 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();
}
}