【发布时间】:2020-07-24 02:17:27
【问题描述】:
我已经阅读了几篇文章、教程、示例。但我仍然无法在页面和窗口之间进行导航。
> Visual Studio Community 2019
> .NET Framework: 4.7.2
为简单起见,我有 3 个页面和 1 个窗口所有视图都为 KIOSK 应用程序全屏显示。详情页面如下:
MVVMApps.sln
│
├── PageInitialize.xaml
├── PageHome.xaml
└──── PageSelectLanguage.xaml
└── WinMessage.xaml
我尝试过 GalaSoft 的 MvvmLight,但一直无法从 PageInitialize.xaml 导航到 PageHome.xaml。我刚刚从GalaSoft 找到了一篇关于 WPF 即将推出INavigationService 的文章。我发现的大多数教程都是 Xamarin 的采样。
另外,我得到了未定义的程序集 using Microsoft.Practices.ServiceLocation;,我看到它在 Enterprise 上可用。在 Nuget 上,安装 MvvmLight 也会安装 CommonServiceLocator。
public class ViewModelLocator
{
private static bool initialized;
public ViewModelLocator()
{
//Fix to keep blend happy
if (initialized) { return; }
initialized = true;
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<PageInitializeViewModel>();
SimpleIoc.Default.Register<PageHomeViewModel>();
SimpleIoc.Default.Register<PageSelectLanguageViewModel>();
SimpleIoc.Default.Register<WinMessageViewModel>();
SetupNavigation();
}
public MainViewModel Main => ServiceLocator.Current.GetInstance<MainViewModel>();
public PageInitializeViewModel PageInitializeViewModel => ServiceLocator.Current.GetInstance<PageInitializeViewModel>();
public PageHomeViewModel PageHomeViewModel => ServiceLocator.Current.GetInstance<PageHomeViewModel>();
public WinMessageViewModel WinMessageViewModel=> ServiceLocator.Current.GetInstance<WinMessageViewModel>();
public static void Cleanup()
{
// TODO Clear the ViewModels
}
private void SetupNavigation()
{
var navigationService = new Helpers.NavigationService<Helpers.NavigationPage>();
navigationService.ConfigurePages();
SimpleIoc.Default.Register<Helpers.INavigationService<Helpers.NavigationPage>>(() => navigationService);
}
}
我已经完成了一些没有 MvvmLight 的教程:-
每篇文章使用不同的方法,由于我不熟悉它,一旦出现错误行并且没有 Intellisense 建议,我将无法继续找到解决方案。
如果我有多个页面和窗口屏幕,是否很难在 WPF 中使用 MVVM?目前,我有一个完整的 WPF 应用程序,但它使用代码隐藏。我想转向 MVVM,因为我已经读到 MVVM 比某处的代码隐藏更好。单页的 MVVM 不是我以前做过的问题,而且在使用 MVVM 时非常棒。
如果导航几乎不可能得到可行的答案,我是否应该保留在 WPF 中使用代码隐藏?
【问题讨论】:
-
如果是小应用,用后面的代码也没关系。 MVVM 背后的想法是您将业务逻辑与视图分离,因此您可以交换我们的视图,例如,您可能希望将 WPF 应用程序移动到 Web 应用程序中,使用 MVVM,理想情况下您只需要重写视图。在 WPF 中导航是不可能的吗?不,Prism (prismlibrary.com) 有很好的导航实现。我确信在 WPF 中有上百万种方法可以进行导航
-
@AthulRaj 是的,它是一个针对零售客户的小型应用程序,例如服务(快餐)。我想转向 MVVM,因为基本是我想体验和了解更多关于 MVVM 的信息。所以,这是一个更好的开始。 WPF 中的导航很简单。但是 MVVM 中的导航完全很难找到。我将探索 Prism 并对其进行一些研究,看看我能从中得到什么