如何使用 Prism 6 在 WPF 应用程序中设置两个内容区域
How can I set two Content region in a WPF apps using Prism 6
我有一个场景。我正在使用 Prism 6.0 编写一个 WPF 应用程序,我想首先弹出一个 Child Window,它将具有三个按钮,用于三种不同的 UI 设计。类似这样。
根据选择,我将更新 MainWindowViewModel
并关闭子项 Window,并显示 MainWindow
。
直到这部分很好。但问题是在这部分之后,三个不同的按钮指向三个不同的 UI 设计。特别是 ContentRegion1 和 ContentRegion2。这两个地区是不同的。
我已经看到,如果我通过 Button 发出命令,那么此代码 运行s 会成功。但是如果我把它放在 MainWindowViewModel
.
中,运行 就不一样了
public MainWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator)
{
_regionManager = regionManager;
_eventAggregator = eventAggregator;
_regionManager.RequestNavigate("ContentRegion1", "firstUiDesign");
...
}
主要Window看起来像这样...
ContentRegion1和ContentRegion2是XAML这样设计的两个
<Border CornerRadius="15" Grid.Column="0">
<StackPanel>
<ContentControl prism:RegionManager.RegionName="ContentRegion1" />
</StackPanel>
</Border>
<Border CornerRadius="15" Grid.Column="1">
<StackPanel Grid.Column="1" Margin="2">
<ContentControl prism:RegionManager.RegionName="ContentRegion2" />
</StackPanel>
</Border>
但是我无法弄清楚我做错了什么或者我需要在代码中添加什么额外的东西才能让它工作。
即使在 BootStrapper.cs 我也有这个代码
引导程序代码:
protected override DependencyObject CreateShell()
{
//return base.CreateShell();
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.RegisterTypeForNavigation<TestUserControl>("firstUiDesign");
}
任何人都可以帮忙吗?
不要使用 ViewModelLocator
创建 MainWindowViewModel
。在 Bootstrapper
MainWindow
之后自己创建,区域已创建:
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
var mainWindowViewModel = Container.Resolve<MainWindowViewModel>();
Application.Current.MainWindow.DataContext = mainWindowViewModel;
Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.RegisterTypeForNavigation<TestUserControl>("firstUiDesign");
}
从 MainWindow.xaml
中删除:
prism:ViewModelLocator.AutoWireViewModel="True">
我有一个场景。我正在使用 Prism 6.0 编写一个 WPF 应用程序,我想首先弹出一个 Child Window,它将具有三个按钮,用于三种不同的 UI 设计。类似这样。
根据选择,我将更新 MainWindowViewModel
并关闭子项 Window,并显示 MainWindow
。
直到这部分很好。但问题是在这部分之后,三个不同的按钮指向三个不同的 UI 设计。特别是 ContentRegion1 和 ContentRegion2。这两个地区是不同的。
我已经看到,如果我通过 Button 发出命令,那么此代码 运行s 会成功。但是如果我把它放在 MainWindowViewModel
.
public MainWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator)
{
_regionManager = regionManager;
_eventAggregator = eventAggregator;
_regionManager.RequestNavigate("ContentRegion1", "firstUiDesign");
...
}
主要Window看起来像这样...
ContentRegion1和ContentRegion2是XAML这样设计的两个
<Border CornerRadius="15" Grid.Column="0">
<StackPanel>
<ContentControl prism:RegionManager.RegionName="ContentRegion1" />
</StackPanel>
</Border>
<Border CornerRadius="15" Grid.Column="1">
<StackPanel Grid.Column="1" Margin="2">
<ContentControl prism:RegionManager.RegionName="ContentRegion2" />
</StackPanel>
</Border>
但是我无法弄清楚我做错了什么或者我需要在代码中添加什么额外的东西才能让它工作。
即使在 BootStrapper.cs 我也有这个代码
引导程序代码:
protected override DependencyObject CreateShell()
{
//return base.CreateShell();
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.RegisterTypeForNavigation<TestUserControl>("firstUiDesign");
}
任何人都可以帮忙吗?
不要使用 ViewModelLocator
创建 MainWindowViewModel
。在 Bootstrapper
MainWindow
之后自己创建,区域已创建:
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
var mainWindowViewModel = Container.Resolve<MainWindowViewModel>();
Application.Current.MainWindow.DataContext = mainWindowViewModel;
Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.RegisterTypeForNavigation<TestUserControl>("firstUiDesign");
}
从 MainWindow.xaml
中删除:
prism:ViewModelLocator.AutoWireViewModel="True">