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

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

Думаю:это мой код для MVVM. Правильно ли это?

Мы знаем MVVM получить QueryString так трудно. поэтому, если я получаю PhoneApplicationPage Refern, я могу получить NavigationContext и NavigationService. таким образом, я могу получить QueryString с помощью NavigationContext.i. Навигация NavigationService. Но, я не знаю, что это MVVM?

ответ

1

Нет, это не 100% MVVM. Для вашего приложения не требуется 100% MVVM. Ваша ViewModel не должна напрямую разговаривать с представлением. Если вам нужно, вы можете отправить события ViewModel на ваш взгляд.

Также вам не нужно устанавливать DataContext в событие Loaded.

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(); 
    } 
} 
Смежные вопросы