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

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

私は考える:これは私のMVVM MVVMです。それが正しいか?

我々はMVVMはQueryStringには非常に困難になってしまう知っています。だから、PhoneApplicationPageを参照すると、NavigationContextとNavigationServiceを取得できます。このようにして、NavigationContext.iでQueryStringを取得できます。NavigationServiceでNavigationを実行できます。しかし、私はこの方法がMVVMであることを知らないのですか?

答えて

1

これは100%MVVMではありません。あなたのアプリケーションはMVVMを100%必要としません。あなたの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(); 
    } 
} 
関連する問題