【发布时间】:2017-06-15 23:17:43
【问题描述】:
这确实应该很容易,但我无法确定它。
我有 Prism 6 的小型 WPF 应用程序
我有主窗口和里面的两个视图。
MainWindow 和 MainWindowViewModel 视图模型类 ConfigurationView 和 ConfigurationViewModel 视图模型类SignInView 和 SignInViewModel 视图模型类
现在第一次显示主窗口时,我想根据一些布尔条件选择要显示的视图
这是bootstrap 类的sn-p。
protected override void ConfigureViewModelLocator()
{
base.ConfigureViewModelLocator();
ViewModelLocationProvider.Register<MainWindow, MainWindowViewModel>();
ViewModelLocationProvider.Register<SignInView, SignInViewModel>();
ViewModelLocationProvider.Register<ConfigurationView, ConfigurationViewModel>();
Container.RegisterInstance(new SignInView());
Container.RegisterInstance(new ConfigurationView());
}
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
IRegionManager _regionManager = Container.Resolve<IRegionManager>();
IRegion _region = _regionManager.Regions[RegionNames.MainRegion];
_region.Add(Container.Resolve<SignInView>());
_region.Add(Container.Resolve<ConfigurationView>());
}
现在打开应用程序的主窗口时总是显示SignInView?
如何根据某些条件选择要显示的视图需要从MainWindowViewModel 类中引入?
更新
public class MainWindowViewModel
{
private IAccountService _accountService;
public MainWindowViewModel(IUnityContainer container)
{
IRegionManager regionManager = Container.Resolve<IRegionManager>();
_accountService = container.Resolve<IAccountService>();
if (_accountService.IsSignedIn)
regionManager.RequestNavigate(RegionNames.MainRegion, new Uri(nameof(ConfigurationView), UriKind.Relative));
else
regionManager.RequestNavigate(RegionNames.MainRegion, new Uri(nameof(SignInView), UriKind.Relative));
}
}
主窗口视图
<Window x:Class="Shell.Views.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
此代码不起作用。
【问题讨论】:
-
@mm8 你能举个例子吗
-
@mm8 我更新了我的问题
-
@mm8 并把它们放在
MainWindowViewModel的构造函数中吧? -
您的 MainWindowViewModel 是在哪里创建的,您在其构造函数中使用的“RegionManager”是什么?
-
@mm8 所有视图模型都是通过设置每个视图的
prism:ViewModelLocator.AutoWireViewModel="True"属性自动创建的。