使用MVVM Light中的RelayCommand <T>进行导航

Jef*_*ren 2 windows-phone-7 mvvm-light

我一直在关注Jesse Liberty 关于MVVM Light for Windows Phone 7 的教程,但我坚持这个问题.我需要从主页面导航到详细页面.在本教程之后,我在MainViewModel中使用了一个RelayCommand:

public RelayCommand<Customer> DetailsPageCommand { get; private set;}
Run Code Online (Sandbox Code Playgroud)

然后我在构造函数中初始化它:

DetailsPageCommand = new RelayCommand<Customer>((msg) => GoToDetailsPage(msg));
Run Code Online (Sandbox Code Playgroud)

最后,您实现了GoToDetailsPage方法:

private object GoToDetailsPage(Customer msg)
{
    System.Windows.MessageBox.Show("Go to details page with: " +
        msg.First +
        " " +
        msg.Last );
        return null;
}
Run Code Online (Sandbox Code Playgroud)

显示消息框有效,但我不确定如何导航到详细信息页面.在教程页面的前几节中,导航处理方式如下:

var msg = new GoToPageMessage {PageName = "DetailPage"};
Messenger.Default.Send(msg);
Run Code Online (Sandbox Code Playgroud)

Mat*_*cey 5

您需要注册才能接收该类型的消息,然后进行适当的导航.
以下假定页面名称,并通过在查询字符串中传递其ID来导航到特定客户的详细信息.

Messenger.Default.Register<Customer>(
    this,
    c => NavigationService.Navigate("/Pages/CustomerDetails.xaml?cid=" + c.Id));
Run Code Online (Sandbox Code Playgroud)

然后,您可以相应地调整代码:

private void GoToDetailsPage(Customer msg)
{
    Messenger.Default.Send(msg);
}
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.