これを Prism に実装することについて、私はすべて混乱しています。1 つのライナーでの私のシナリオは、メイン ウィンドウの上に別のモーダル/非モーダル ウィンドウとして表示されるビューで 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));
ご覧のとおり、ビューを表示するダイアログを起動し (以下にコードを示します)、ビューの領域の 1 つをナビゲートしようとします。
ポップアップ ウィンドウ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 public class 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 の Contents が表示されるはずですが、空白です。
コードがわかりにくい場合は、領域を持ち、Dialog Service を介して MainWindow(Shell) ではなく別のウィンドウとして表示される View でナビゲート (RequestNavigate を使用) する方法についてアドバイスをください。