2017-06-27 70 views
0

我有一個場景。我正在使用Prism 6.0編寫一個WPF應用程序,我想首先彈出一個子窗口,它將有三個按鈕用於三種不同的UI設計。類似這樣。我們將更新MainWindowViewModel,並關閉子窗口,並顯示MainWindow我如何使用Prism 6設置WPF應用程序中的兩個內容區域6

直到這部分是好的。但問題出在這部分之後,三個不同的按鈕指向三種不同的UI設計。特別是ContentRegion1和ContentRegion2。這兩個地區是不同的。

我已經看到,如果我通過一個按鈕發出一個命令,那麼這段代碼運行成功。但是,如果我把它放在MainWindowViewModel中,也是一樣。

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

... 

} 

這樣的MainWindowlooks ...

enter image description here

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

} 

可以在這個任何人的幫助。

+0

所以你的問題是,你不能顯示在firstUiDesign視圖ContentRegion1?你的引導程序是如何實現的? – mm8

+0

我已經用Bootstrapper代碼更新了我的源代碼 – Debhere

+0

您在哪裏創建MainWindowViewModel?您是否使用ViewModelLocator爲您創建它? – mm8

回答

1

請勿使用ViewModelLocator來創建MainWindowViewModel。自己在BootstrapperMainWindow和地區建立它已創建:

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"> 
+0

這是一個不錯的解決方案,我會嘗試,但目前我已經用以下方式解決了它。在MainWindowViewModel中,我在構造函數中具有以下代碼:this._regionManager.RegisterViewWithRegion(「ContentRegion1」,typeof(firstUiDesign));' 這樣,它在運行時顯示FirstUiDesign。無論如何感謝您指出Prism ViewModelLocator – Debhere

相關問題