1. Cần tạo app theo chuẩn của Prism
Có nhiều cách tạo app theo chuẩn của prism. Mình thường dùng cách như ở link dưới đây
Tham khảo Getting-started-with-Prism-70
2. Cấu trúc project
3. Tại MainWindow.xaml define các vùng của app
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<Window x:Class="testprism.Views.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:prism="http://prismlibrary.com/" prism:ViewModelLocator.AutoWireViewModel="True" mc:Ignorable="d" Title="MainWindow" Height="450" Width="800"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="2*"/> <RowDefinition Height="8*"/> </Grid.RowDefinitions> <Border Grid.Row="0" BorderBrush="Black" BorderThickness="1"> <ContentControl prism:RegionManager.RegionName="HeaderRegion"/> </Border> <Border Grid.Row="1" BorderBrush="AliceBlue" BorderThickness="1"> <ContentControl prism:RegionManager.RegionName="MainRegion"/> </Border> </Grid> </Window> |
4. Tại MainWindowViewModel gọi view để hiển thị tại các region
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using Prism.Events; using Prism.Mvvm; using Prism.Regions; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using testprism.Views; namespace testprism.ViewModels { public class MainWindowViewModel : BindableBase { public MainWindowViewModel(IRegionManager regionManager, IEventAggregator eventAggregator) { regionManager.RegisterViewWithRegion("MainRegion", typeof(Main)); regionManager.RegisterViewWithRegion("MainRegion", typeof(Content)); regionManager.RegisterViewWithRegion("HeaderRegion", typeof(Header)); regionManager.RequestNavigate("MainRegion", nameof(Main)); regionManager.RequestNavigate("HeaderRegion", nameof(Header)); } } } |
5. Tạo các view Main.xaml và Header.xaml cùng với viewmodel MainViewModel.xaml và HeaderViewModel.xaml
6. Từ MainViewModel có thể navigate đến Content bằng regionManager.RequestNavigate(“MainRegion”, nameof(Content)); vì Content đã được đăng ký từ trước rồi.