Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在多窗口WPF应用程序中切换ViewModels?_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何在多窗口WPF应用程序中切换ViewModels?

C# 如何在多窗口WPF应用程序中切换ViewModels?,c#,wpf,mvvm,C#,Wpf,Mvvm,我正在尝试创建一个WPF模型视图模型,该模型具有单独的LoginWindow、RegistrationWindow和MainDashboardWindow 我已经阅读了Rachel Lim关于使用ApplicationViewModel和ApplicationView(包含其他视图)导航MVVM的解决方案,但我在理解某些方面有困难 我计划通过设置LoginWindow和RegistrationWindow的DataContext来使用LoginViewModel和RegistrationVie

我正在尝试创建一个WPF模型视图模型,该模型具有单独的LoginWindow、RegistrationWindow和MainDashboardWindow

我已经阅读了Rachel Lim关于使用ApplicationViewModel和ApplicationView(包含其他视图)导航MVVM的解决方案,但我在理解某些方面有困难

我计划通过设置LoginWindow和RegistrationWindow的DataContext来使用LoginViewModel和RegistrationViewmodel(它们都不会从BaseViewModel继承),然后在登录到应用程序后,使用MainDashboardViewModel在MainDashboardWindow上的viewmodel之间切换

这是正确的方法吗?
如果这不是正确的方法,如何实现可在窗口之间切换的应用程序范围的viewmodel(一次只打开一个窗口)?

要正确实现MVVM,您需要了解什么是视图、模型和viewmodel

视图是没有任何代码的UI。视图中的DataContext是ViewModel类,一个视图应该与一个ViewModel关联。您应该通过XAML代码设置DataContext

模型是包含数据的类以及为该数据处理的一些方法。我强烈建议您在为您的程序设计模型时使用存储库模式

ViewModel是您将业务方法放在其中的地方。所有ViewModel都必须从BaseViewModel实现,并且对VIEW一无所知

在您的情况下,需要创建3个不同的视图,3个视图模型用于3个视图

让我们从您的登录窗口开始。首先,您需要通过在登录视图中指明登录窗口的ViewModel来指定它

<Window x:Class="SampleApplication.LoginWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SampleApplication.ViewModels"
    Title="Login" Height="350" Width="525">
<Window.DataContext>
   <local:LoginViewModel/>
</Window.DataContext>

在登录窗口中有两个按钮。一个是登录,另一个是注册。每个按钮都必须与视图中的模型绑定。通过这种方式,您可以正确地实现MVVM。要在窗口之间导航,必须关闭当前窗口并打开新窗口。要关闭窗口,要打开窗口,只需创建视图的对象并调用
ViewObject.Show()