如何使用MVVM执行View导航?赢得RT

时间:2015-05-09 00:10:19

标签: c# mvvm navigation win-universal-app

我已经按照MVVM模式启动了一个Windows Universal项目,并且遇到了需要通过单击按钮导航到另一个页面的情况。

通常我会在代码后面使用按钮的点击事件,如下所示:

        private void AppBarButton_Click(object sender, RoutedEventArgs e)
        {
            // Navigation Without parameters
            this.Frame.Navigate(typeof(SecondPage));

        }

但是由于我需要使用这个应用程序遵循MVVM模式,我想知道如何设置导航到按钮点击的新视图?

在Google搜索之后,我在WPF解决方案中遇到过ICommand这个任务,但不是100%关于如何为这个Windows Universal Framework实现它。

1 个答案:

答案 0 :(得分:2)

基本上你有两个选择

<强> 1。使用导航服务

您可以定义INavigationService接口并将其传递给viewmodel程序集中的所有ViewModel(假设您使用的是不同的程序集,这对于确保您没有引用视图模型中的视图非常重要,因此违反了MVVM模式)。

public interface INavigationService
{
    void Navigate(string page, object parameter);
}

在您的视图模型中,您只需使用navigationService.Navigate("UserEditPage", selectedUser.Id);调用它即可。

实施可以像

一样简单
public class WinRtNavigationService : INavigationService 
{
    public void Navigate(string page, object parameter) 
    {
        Type pageType = Type.GetType(string.Format("YourCompany.YourApp.ViewModels.{0}", page));
        ((Frame)Window.Current.Content).Navigate(pageType, parameter);
    }
}

如果您需要从ViewModels导航,请使用此功能。

<强> 2。使用行为

您可以使用行为直接向XAML添加可重用的导航支持,从而完全避免背后的代码。

为此,Blend提供了Interactivity Triggers和NavigateToPageAction行为。

<Page 
    xmlns:i="using:Microsoft.Xaml.Interactivity"
    xmlns:c="using:Microsoft.Xaml.Interactions.Core" >
    ....
    <Button Content="Edit">
        <i:Interaction.Behaviors>
            <i:BehaviorCollection>
                <c:EventTriggerBehavior EventName="Tapped">
                    <c:NavigateToPageAction TargetPage="YourCompany.YourApp.ViewModel.UserEditPage" Parameter="{Binding Path=SelectedUser.Id}" />
                </c:EventTriggerBehavior>
            </i:BehaviorCollection>

        </i:Interaction.Behaviors>
    </Button>
    ...
</Page>

混合行为/交互触发器通常用于将导航功能绑定到按钮或其他UI元素(即点击不必是按钮的图片),因为它不需要任何代码在Code Behind或ViewModel中。

如果在某些验证后要进行导航,即您有一个用户注册的多页表单,并且您有一个&#34;发送&#34;按键绑定到RegisterCommandRegisterCommand进行在线验证,您需要返回上一页,您想要使用INavigationService