我正在尝试创建一个具有单独的LoginWindow,RegistrationWindow和MainDashboardWindow的WPF Model-View-ViewModel。
我已经阅读过Rachel Lim使用ApplicationViewModel和包含其他视图的ApplicationView导航MVVM的解决方案,但我无法理解某些内容。
我计划通过设置LoginWindow和RegistrationWindow的DataContext来使用LoginViewModel和RegistrationViewmodel(它们都不会从BaseViewModel继承),然后在使用MainDashboardViewModel登录到应用程序之后在MainDashboardWindow上的viewmodel之间切换。
这是正确的方法吗? 如果这不是正确的方法,我如何实现可以在窗口之间切换的应用程序范围的视图模型(一次只打开一个窗口)?
答案 0 :(得分:0)
要正确实现MVVM,您需要了解View,Model和ViewModel是什么。
视图是WON“没有任何代码”的用户界面。 View中的DataContext是ViewModel类,一个View应该与一个ViewModel相关联。您应该通过XAML代码设置DataContext。
Model是包含数据的类和处理该数据的一些方法。我强烈建议您在设计模型时使用Repository Pattern。
ViewModel是您将业务方法放入其中的位置。所有ViewModel都必须从BaseViewModel实现,并且不要知道任何关于视图的内容。
在您的情况下,您需要为3个视图创建3个不同的视图,3个ViewModel。
让我们从您的登录窗口开始。首先,您需要在Login视图中指定ViewModel for Login窗口。
<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>
登录窗口中有2个按钮。一个是登录,然后是注册。每个按钮必须与ViewModel中的RelayCommand绑定。通过这种方式,您可以正确实现MVVM。要在窗口之间导航,您必须关闭当前窗口并打开一个新窗口。要关闭窗口see this,要打开窗口,只需创建视图对象并致电ViewObject.Show();