Silverlight中的MVVM和导航

Silverlight中的MVVM和导航,mvvm,navigation,silverlight-5.0,Mvvm,Navigation,Silverlight 5.0,假设我使用的是MVVM方法(Silverlight) 我所有的按钮都是用命令操作的 假设我有一个按钮用于导航到某个页面,比如我们在网格中选择了一个客户,并希望导航到该客户的详细信息视图 我可以用DelegateCommand处理这个按钮吗?怎么用?我可以处理ViewModel中的导航吗?我是否被迫从后面的代码处理导航。我们开始: Xaml: 基本上,该命令按照正常方式绑定到按钮。该命令是viewmodel上的一个属性。执行该命令时,它只调用viewmodel中的私有方法。此处INavigatio

假设我使用的是MVVM方法(Silverlight)

我所有的按钮都是用命令操作的

假设我有一个按钮用于导航到某个页面,比如我们在网格中选择了一个客户,并希望导航到该客户的详细信息视图

我可以用DelegateCommand处理这个按钮吗?怎么用?我可以处理ViewModel中的导航吗?我是否被迫从后面的代码处理导航。

我们开始:

Xaml:


基本上,该命令按照正常方式绑定到按钮。该命令是viewmodel上的一个属性。执行该命令时,它只调用viewmodel中的私有方法。

此处INavigationService不可用。。如果我们添加名称空间System.Windows.Navigation..,则会出现错误。

当前如何从一页导航到另一页?你们有什么导航服务吗?如果您能提供一些非常有用的代码,现在我使用代码隐藏方法:
private void btnCustomer\u Click(object sender,RoutedEventArgs e){NavigationService.Navigate(new Uri(“/CustomerDetails”,UriKind.Relative));}
开放性问题:导航真的是ViewModel的一部分吗,或者它是视图的一个实现细节?如果是后者,您可以根据需要坚持使用代码隐藏或HyperlinkButton。INavigationService位于哪个dll中?我在页面中使用NavigationService,页面具有NavigationService声明,但如何在ViewModel中执行此操作?我想我已根据您的建议部分解决了此问题。我在viewmodel构造函数中使用了NavigationService而不是INavigationService,并将usings语句设置为System.Windows.Navigation,但单击导航按钮时未使用此版本的构造函数,因此,我的NavigationService变量为空!!在实例化viewmodel时,如何传递导航服务?例如:新的ViewModel(NavigationService),其中NavigationService是您的导航服务对象的实例。谢谢,我知道我必须制作界面。对于其他观众,您可以在中获得更多信息
<Button Command="{Binding GoToCustomerDetailsPage}" Content="Customer Details"/>
private INavigationService _navigationService;

public ViewModel(INavigationService navigationService)
{
    _navigationService=navigationService;
}
public ICommand GoToCustomerDetailsPage
{
    get{
        return new DelegateCommand(GoToCustDetailsPage,CanGoToCustDetailsPage);
        }
}

private void GoToCustDetailsPage()
{
    _navigationService.Navigate(new Uri("/CustomerDetails", UriKind.Relative));
}

private bool CanGoToCustDetailspage()
{
   return true;//Or some sensible code that determines if this is sensible.
}