gpt4 book ai didi

c# - [UWP][MVVM] 在窗口中的框架中导航

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:32 25 4
gpt4 key购买 nike

我正在构建一个带有导航 View 的 UWP 应用。当我点击我的导航项时,我想改变我的框架。没有 MVVM 很容易做到这一点,但我更喜欢使用 MVVM 的解决方案。

enter image description here

我的框架是“ContentFrame”。现在我想使用导航服务。执行此操作的经典方法是:

 public class NavigationService : INavigationService
{
public void NavigateTo(Type viewType)
{
Frame rootFrame = Window.Current.Content as Frame;
rootFrame.Navigate(viewType);
}

public void NavigateBack()
{
Frame rootFrame = Window.Current.Content as Frame;
rootFrame.GoBack();
}
}

但对于我的用例,“Window.Current.Content”应该替换为我主页中的框架。我不知道如何通过 MVVM 访问它。

我的项目在公共(public) git 上:https://github.com/stefmorren/AutoClicker/tree/Devel

如果更容易的话,你可以做一个推送请求。

最佳答案

首先添加一个类型为Frame的公共(public)属性给你的HomePage :

public Frame NavigationFrame => ContentFrame;

现在,您的 HomePage当前在根内 Frame .要获取它,您必须使用它的 Content属性:

public class NavigationService : INavigationService
{
public void NavigateTo(Type viewType)
{
var rootFrame = Window.Current.Content as Frame;
var homePage = rootFrame.Content as HomePage;
homePage.NavigationFrame.Navigate(viewType);
}

public void NavigateBack()
{
var rootFrame = Window.Current.Content as Frame;
var homePage = rootFrame.Content as HomePage;
homePage.NavigationFrame.GoBack();
}
}

更简单的解决方案

为了进一步简化,您甚至可以删除 rootFrame共。在 App.xaml.cs您必须更新代码才能创建 HomePage直接:

protected override void OnLaunched(LaunchActivatedEventArgs e)
{
HomePage page = Window.Current.Content as HomePage;

// Do not repeat app initialization when the Window already has content,
// just ensure that the window is active
if (page == null)
{
page = new HomePage();
Window.Current.Content = page;
}

if (e.PrelaunchActivated == false)
{
// Ensure the current window is active
Window.Current.Activate();
}
}

现在您将使用以下内容访问 NavigationFrame属性:

public class NavigationService : INavigationService
{
public void NavigateTo(Type viewType)
{
var homePage = Window.Current.Content as HomePage;
homePage.NavigationFrame.Navigate(viewType);
}

public void NavigateBack()
{
var homePage = Window.Current.Content as HomePage;
homePage.NavigationFrame.GoBack();
}
}

现在HomePage直接就是Content你的Window , 所以我们可以通过 Window.Current.Content 访问它.

关于c# - [UWP][MVVM] 在窗口中的框架中导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49596703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com