C# 我应该更改控件可见性还是为登录屏幕创建不同的视图?

C# 我应该更改控件可见性还是为登录屏幕创建不同的视图?,c#,mvvm,prism,C#,Mvvm,Prism,我正在做一个使用PRISM 4和MVVM模式的项目 项目要求在启动时显示登录屏幕,允许用户登录,如果登录成功,则从列表中选择项目。可以在登录窗口的边界内进行选择,但需要替换所有控件 我将登录屏幕创建为一个窗口,显示在Shell的构造函数中。这允许我在Shell之前显示它,同时仍然使Shell成为应用程序的主窗口 问题是我需要在登录窗口中显示项目选择控件,我不确定在仍然使用MVVM和PRISM准则的情况下如何在视图中隐藏控件/显示新控件 另一种解决方案是使用两个shell,其中一个用于显示两个不同

我正在做一个使用PRISM 4和MVVM模式的项目

项目要求在启动时显示登录屏幕,允许用户登录,如果登录成功,则从列表中选择项目。可以在登录窗口的边界内进行选择,但需要替换所有控件

我将登录屏幕创建为一个窗口,显示在Shell的构造函数中。这允许我在Shell之前显示它,同时仍然使Shell成为应用程序的主窗口

问题是我需要在登录窗口中显示项目选择控件,我不确定在仍然使用MVVM和PRISM准则的情况下如何在视图中隐藏控件/显示新控件

另一种解决方案是使用两个shell,其中一个用于显示两个不同的视图(即登录和项目选择视图),而另一个则是应用程序的“主”shell

如果我决定使用两个shell,登录和项目选择屏幕将在两个视图中分开,我将不必玩弄控件可见性。但话说回来,我不知道该如何具体实施


您建议我如何继续?

建议在初始化Shell之前显示登录对话框。 因此,您需要创建一个新窗口,在引导程序的InitializeShell方法中显示登录对话框。如果用户登录成功,则初始化Shell,否则终止进程。这是重新推荐的方式,因为您的UI(Shell)可能因用户而异(保存的UI设置、不同的访问权限等)


对于“项目选择视图”,我建议创建一个对话框,当Shell成功加载时,该对话框在ShellViewModel中调用(通过加载的行为)。然后用户可以在登录后立即选择一个项目

我实际上刚刚创建了另一个“登录”shell,它显示在“主”shell之前

“登录”shell现在承载“凭证输入”和“项目选择”视图。如果用户的凭据有效,则用户可以从“凭据输入”视图导航到“项目选择”视图

同样,用户可以使用PRISM中的导航日志功能从“项目选择”视图返回“凭证输入”视图

选择项目后,“登录外壳”将隐藏,并显示“主”外壳