我有MainWindow.XAML
和CustomersView.XAML
。
当我点击MainWindow上的客户按钮时,我想导航到CustomersView.XAML
并且需要传递一些参数。
我可以使用NavigationService
但仅适用于Pages而不是Window.Hyperlink目前不是一个选项。
这可能是相当简单的事情,但不确定如何使用MVVM和任何第三方控件实现此功能。
答案 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,您可以在其中定义区域并让您的页面导航到该区域。