0

我有一个场景。我正在使用 Prism 6.0 编写一个 WPF 应用程序,我想首先弹出一个子窗口,该窗口将具有用于三种不同 UI 设计的三个按钮。类似这样。 在此处输入图像描述

根据选择,我将更新MainWindowViewModel并关闭子窗口,并显示MainWindow.

直到这部分很好。但问题出在这部分之后,三个不同的按钮指向了三种不同的UI设计。特别是 ContentRegion1 和 ContentRegion2。这两个地区是不同的。

我已经看到,如果我通过 Button 输入命令,那么此代码将成功运行。但是如果我把它放进去,同样的也不会运行MainWindowViewModel

public MainWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator)
{
    _regionManager = regionManager;
    _eventAggregator = eventAggregator;
    _regionManager.RequestNavigate("ContentRegion1", "firstUiDesign");

...

}

MainWindow看起来像这样......

在此处输入图像描述

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");

}

任何人都可以在这方面提供帮助。

4

1 回答 1

1

不要使用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">
于 2017-06-27T12:38:23.400 回答