C# 如何通过单击';它已经在一页里面了? 我有一个包含框架的窗口 我有两页,Page1和Page2,还有。。。在他们里面,我 有一个按钮 加载窗口时,框架将导航到第1页

C# 如何通过单击';它已经在一页里面了? 我有一个包含框架的窗口 我有两页,Page1和Page2,还有。。。在他们里面,我 有一个按钮 加载窗口时,框架将导航到第1页,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我希望通过单击Page1中的按钮,框架导航到Page2 我尝试使用MVVM: 这是XAML的窗口 <Window x:Class="MVVM_Course.Navigation"> <Window.DataContext> <viewmodel:NavigationViewModel/> </Window.DataContext> <Grid> <Frame x:Name=

我希望通过单击Page1中的按钮,框架导航到Page2


我尝试使用MVVM:

这是XAML的窗口

<Window x:Class="MVVM_Course.Navigation">
    <Window.DataContext>
        <viewmodel:NavigationViewModel/>
    </Window.DataContext>
    <Grid>
        <Frame x:Name="frame" Content="{Binding Page, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    </Grid>
</Window>
页面1 XAML:

<Page x:Class="MVVM_Course.Page1">
    <Page.DataContext>
        <vm:Page1ViewModel/>
    </Page.DataContext>
    <Grid>
        <Button x:Name="btnGoTo2" FontSize="50" Command="{Binding BtnPage2Command}" Content="Go to Page 2"/>
    </Grid>
</Page>
编译时,框架导航到第1页,但单击 按钮不会更改页面。使用调试红圈工具 NavigationViewModel中的属性“页面”似乎正在工作 从第1页更改为第2页,但。。。结果是实际上什么都没有 在UI中发生


请看:@adPartage谢谢,在您发送的链接中,我发现使用NavigationService可以在不参考框架的情况下进行导航,并且可以正常工作。现在唯一的问题是我无法从ViewModel类访问导航服务。解决这个问题的一个方法是将导航服务传递给ViewModel构造函数(从视图';的代码隐藏-您现在将在其中初始化和设置DataContext)。
<Page x:Class="MVVM_Course.Page1">
    <Page.DataContext>
        <vm:Page1ViewModel/>
    </Page.DataContext>
    <Grid>
        <Button x:Name="btnGoTo2" FontSize="50" Command="{Binding BtnPage2Command}" Content="Go to Page 2"/>
    </Grid>
</Page>
class Page1ViewModel
{
    private ICommand btnPage2Command;
    public ICommand BtnPage2Command { get { return btnPage2Command; } set { btnPage2Command = value; } }
    public Page1ViewModel()
    {
        BtnPage2Command = new RelayCommand(GoToPage2);
    }
    private void GoToPage2(object obj)
    {
        NavigationViewModel.ChangePage(new Page2());
    }
}