我对在 Prism 中实现这一点感到很困惑。我在一个班轮中的场景是如何在一个视图中实现 Prism Navigation (regionManager.RequestNavigate),该视图在主窗口上显示为单独的模态/非模态窗口。
从这篇文章中获取一些代码,我现在可以显示一个单独的窗口,但我对在显示的窗口区域中导航感到非常困惑。我将尝试在下面放置一些代码来澄清我的情况。
RoomBandViewModel中的这段代码启动对话框
private void ManageRoomFacility() {
dialogService.ShowDialog<RoomFacilityMainWindowView>(this, container.Resolve<RoomFacilityMainWindowView>());
regionManager.RequestNavigate(RegionNames.Main_Region, new Uri("RoomFacilityMainView", UriKind.Relative));
可以看出,我启动了显示视图的对话框(代码如下所示),然后尝试在视图的区域之一中导航
弹出窗口RoomFacilityMainWindowView
<Window x:Class="HotelReservation.Main.View.RoomFacilities.RoomFacilityMainWindowView"
<view:RoomFacilityMainView
prism:RegionManager.RegionName="{x:Static const:RegionNames.Window_Main_Region}"/>
</Window>
窗口内的 UserControl ( RoomFacilityMainView )
<UserControl x:Class="HotelReservation.Main.View.RoomFacilities.RoomFacilityMainView"
<Grid VerticalAlignment="Stretch" >
...
<Border Grid.Column="0" Style="{StaticResource RegionBorderStyle}">
<StackPanel>
<TextBlock Text="Some Sample Text"/>
<ContentControl prism:RegionManager.RegionName="{x:Static const:RegionNames.Window_List_Region}"
/>
</StackPanel>
</Border>
<GridSplitter Width="5" Grid.Column="1" HorizontalAlignment="Stretch" />
<Border Grid.Column="2" Style="{StaticResource RegionBorderStyle}" >
<TabControl x:Name="Items" Margin="5" prism:RegionManager.RegionName="{x:Static const:RegionNames.Window_Edit_Region}" />
</Border>
</Grid>
</UserControl>
后面的代码 ( RoomFacilityMainView.xaml.cs )
public partial class RoomFacilityMainView : UserControl {
public RoomFacilityMainView() {
InitializeComponent();
RoomFacilityMainViewModel viewModel = this.DataContext as RoomFacilityMainViewModel;
if (viewModel == null) {
viewModel = ServiceLocator.Current.GetInstance<RoomFacilityMainViewModel>();
this.DataContext = viewModel;
}
}
}
RoomFacilityMainViewModel 公共类 RoomFacilityMainViewModel : BindableBase {
IRegionManager regionManager;
IUnityContainer container;
public RoomFacilityMainViewModel(IRegionManager regionManager, IUnityContainer container) {
this.regionManager = regionManager;
this.container = container;
regionManager.RequestNavigate(RegionNames.Window_List_Region, new Uri("RoomFacilityListView", UriKind.Relative));
}
}
使用此代码不会发生导航,我只会得到一个空白窗口。RoomFacilityListView.xaml 的内容应该显示,但它是空白的。
如果代码令人困惑,那么请就如何使用具有区域但通过 Dialog Service 显示为单独窗口而不是 MainWindow(Shell) 的 View 导航(使用 RequestNavigate)提供建议。