我想从ViewModel实现页面导航。 如您在代码中所见,在主窗口中有一个必须填充页面的框架。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MaxWidth = "175" ></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<Grid Grid.Column="1">
<Frame Background = "Gray" NavigationUIVisibility= "Hidden" Name = "mainFrame" Margin= "0,0,5,0" >
</Frame>
</Grid>
</Grid >
在MainWindowViewModel中,我实现了必须通过单击按钮“转到下一页”执行的命令方法。此方法称为“ ExecuteOpenTestResultsRecoveryPage”
private void ExecuteOpenTestResultsRecoveryPage(object parameter)
{
RecoveryPage recoveryPage = new RecoveryPage();
MainWindow mainWindow = new MainWindow();
mainWindow.mainFrame.NavigationService.Navigate(recoveryPage);
}
通过单击“转到下一页”按钮,将执行该方法,但是框架中没有任何反应,我也不知道为什么。请您能帮助我实现它吗?
谢谢!
答案 0 :(得分:0)
我不建议您在要显示新页面时打开新的MainWindow。最好向视图发送一条消息以显示特定的其他视图。这样,您就可以实现关注点分离。
答案 1 :(得分:0)
您正在编辑new MainWindow()
的{{1}}的内容。不是您当前的那个。
mainFrame
尝试一下。
答案 2 :(得分:0)
您正在实例化mainwindow的另一个实例。 这只是在内存中。 然后,将其框架的内容设置为用户控件。 但是您永远不会显示这个新的主窗口。
您可以参考现有的主窗口,例如: var theMainWindow = Application.Current.MainWindow作为MainWindow。 然后在其上设置框架的内容。 但这通常被认为是不好的做法。
我建议您首先使用google viewmodel。 工作方式是为每个要导航的对象定义一个视图模型。 使用datatype =将UserControl(而非页面)与每个用户控件相关联。这在您在app.xaml中合并的资源字典中。 然后在主窗口中使用contentcontrol(而不是frame)来托管这些控件。 从主窗口视图模型中公开一个公共属性CurrentViewModel并将内容控件的内容绑定到该控件。将该属性更改为另一个视图模型,然后将其模板化到关联的用户控件中。
这是一个标准模式,您应该可以很容易地找到样本。