2013-05-12 71 views
3

我在MVVM Light工具包中看到有一個NavigationService。這是非常簡單的,當你只是導航到一個視圖和傳球沒有數據,即MVVM光導航服務 - 參數在Windows rt

_navigationService.Navigate(typeof(DetailView)); 

上有導航方法,它需要一個對象參數即

_navigationService.Navigate(typeof(DetailView), this.SelectedItem.Id); 

問題是,如何做一個過載然後我檢索我的目標視圖模型中的參數?

+0

頁面中的OnNavigatedTo覆蓋接收到NavigationParameter。您可以將視圖中的參數傳遞給ViewModel。相反,您可以使用Mvvm提供的'Messenger'服務將消息發送到ViewModel,以便將其與導航分開發送。 – 2013-05-16 20:55:31

回答

4

我結束了以下

public interface IView 
{ 
    IViewModel ViewModel { get; } 
} 

public interface IViewModel 
{ 
    void Initialise(object parameter); 
} 

然後在我的觀點的背後代碼;

public sealed partial class MyView : IView 
{ 
    public ViewModel.IViewModel ViewModel 
    { 
     get { return this.DataContext as IViewModel; } 
    } 

    public MyView() 
    { 
     this.InitializeComponent(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    {    
     base.OnNavigatedTo(e); 

     if (e.Parameter != null) 
     { 
      this.ViewModel.Initialise(e.Parameter); 
     } 
    }   
} 

從那裏我現在可以在我的ViewModel中使用參數來實現IViewModel接口。

public void Initialise(object parameter) 
{ 
    if (parameter != null) 
    { 
     // do something 
    } 
} 
+0

OnNavigatedTo如何以及​​在哪裏定義,以便您可以在「MyView」中覆蓋它? – Michael 2014-10-24 13:05:53

+0

這是在開箱即用的頁面中定義的 - 請參閱http://msdn.microsoft.com/library/windows/apps/br227508 – obaylis 2014-10-30 08:10:21