如何在WPF中从一个页面导航到另一个页面

时间:2015-02-18 04:47:48

标签: c# wpf xaml mvvm

我有MainWindow.XAMLCustomersView.XAML

当我点击MainWindow上的客户按钮时,我想导航到CustomersView.XAML并且需要传递一些参数。

我可以使用NavigationService但仅适用于Pages而不是Window.Hyperlink目前不是一个选项。

这可能是相当简单的事情,但不确定如何使用MVVM和任何第三方控件实现此功能。

3 个答案:

答案 0 :(得分:3)

stack exec Counter

答案 1 :(得分:1)

简单方式=> XAML:

<Button HorizontalAlignment="Right" Name="continueButton" Width="75" Margin="0,0,8,11" Height="23" VerticalAlignment="Bottom" Click="continueButton_Click">
    Navigate
</Button>

C#:

private void continueButton_Click(object sender, RoutedEventArgs e)
    {
        this.NavigationService.GoForward();
        //or
        this.NavigationService.Navigate("Second.xaml")
    }

在Mvvm XAML中:

<Button Command="{x:Static Views:Commands.NavigateHelp}" Content="Help"/>

在视图中(我们有一个包含所有这些的Commands.cs文件):

public static RoutedCommand NavigateHelp = new RoutedCommand();

在Page contstructor中,您可以连接两个:

CommandBindings.Add(new CommandBinding(Commands.NavigateHelp, NavigateHelpExecute));

NavigateHelpExecute可以在后面的代码中(这就是我们所做的),挂钩到ViewModel事件处理程序,或者其他什么。这样做的好处是你可以禁用其他类似的导航:

CommandBindings.Add(new CommandBinding(NavigationCommands.Refresh, null));

答案 2 :(得分:0)

在WPF中有很多选项可以从一个窗口导航到另一个窗口。您可以在MainWindow中使用框架,并在框架内导航所有页面。

    <Window 
        x:Class="NavigationSample.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Window1" Height="300" Width="300"
        >
        <DockPanel>
            <Frame x:Name="_mainFrame" />
        </DockPanel>
    </Window>

从代码中,您可以告诉框架进行导航,如下所示:

_mainFrame.Navigate(new Page1());

这恰好是一条有用的快捷方式:

_mainFrame.NavigationService.Navigate(new Page1());

或者,如果您使用任何类似PRISM的框架,您可以创建一个Shell,您可以在其中定义区域并让您的页面导航到该区域。

Navigation Using the Prism Library 5.0 for WPF