Install-Package Prism.WPF;
Install-Package Prism.DryIOC;
//app.xaml <prism:PrismApplication x:Class="WpfApp4.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp4"xmlns:prism="http://prismlibrary.com/"> </prism:PrismApplication>//App.xaml.cs using System.Configuration; using System.Data; using System.Windows; using Prism.DryIoc; using Prism.Commands; using WpfApp4.Services; using WpfApp4.ViewModels; using WpfApp4.Views;namespace WpfApp4 {/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<IIdService,IdService>();containerRegistry.Register<IISBNService,ISBNService>();containerRegistry.RegisterForNavigation<MainWindow, MainWinowViewModel>("MainWindow");containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>("ViewA");containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("ViewB");}protected override void OnInitialized(){base.OnInitialized();var regionManager=Container.Resolve<IRegionManager>();regionManager.RequestNavigate("MainRegion", "ViewA");}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);}}}
//App.xaml <prism:PrismApplication x:Class="WpfApp4.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfApp4"xmlns:prism="http://prismlibrary.com/"> </prism:PrismApplication>//App.xaml.cs using System.Configuration; using System.Data; using System.Windows; using Prism.DryIoc; using Prism.Commands; using WpfApp4.Services; using WpfApp4.ViewModels; using WpfApp4.Views;namespace WpfApp4 {/// <summary>/// Interaction logic for App.xaml/// </summary>public partial class App : PrismApplication{protected override Window CreateShell(){return Container.Resolve<MainWindow>();}protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.Register<IIdService,IdService>();containerRegistry.Register<IISBNService,ISBNService>();containerRegistry.RegisterForNavigation<MainWindow, MainWinowViewModel>("MainWindow");containerRegistry.RegisterForNavigation<ViewA, ViewAViewModel>("ViewA");containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("ViewB");}protected override void OnInitialized(){base.OnInitialized();var regionManager=Container.Resolve<IRegionManager>();regionManager.RequestNavigate("MainRegion", "ViewA");}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);}}}//MainWindow.xaml <Window x:Class="WpfApp4.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:local="clr-namespace:WpfApp4"xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"mc:Ignorable="d"WindowState="Maximized"Title="{Binding MainWinTitle,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" VerticalAlignment="Stretch"HorizontalAlignment="Stretch"><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/> </Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition/><ColumnDefinition/></Grid.ColumnDefinitions><Button Grid.Row="0" Grid.Column="0"Content="View A"Command="{Binding NavigateCommand}"CommandParameter="ViewA"/><Button Grid.Row="0" Grid.Column="1"Content="View B"Command="{Binding NavigateCommand}"CommandParameter="ViewB"/><ContentControl Grid.Row="1"Grid.Column="0"Grid.ColumnSpan="2"prism:RegionManager.RegionName="MainRegion"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"BorderBrush="Blue"BorderThickness="5"/></Grid> </Window>//MainWindowViewModel using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WpfApp4.Services;namespace WpfApp4.ViewModels {public class MainWinowViewModel : BindableBase{IISBNService isbnService;IRegionManager regionManager;public MainWinowViewModel(IISBNService isbnServiceValue,IRegionManager regionManagerValue){MainWinTitle = $"In MainWindow {DateTime.Now.ToString("yyyy - MM - dd:HH - mm - ss")},{Guid.NewGuid():N}";isbnService = isbnServiceValue;regionManager = regionManagerValue;InitTimer();NavigateCommand = new DelegateCommand<string>(NavigateCommandExecuted);}private void NavigateCommandExecuted(string viewName){if(!string.IsNullOrEmpty(viewName)){regionManager.RequestNavigate("MainRegion",viewName);}}private void InitTimer(){System.Timers.Timer tmr = new System.Timers.Timer();tmr.Interval = 1000;tmr.Elapsed += Tmr_Elapsed;tmr.Start();}private void Tmr_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){MainWinTitle = $"In MainWindow {DateTime.Now.ToString("yyyy - MM - dd:HH - mm - ss")},{Guid.NewGuid():N}";}private string mainWinTitle;public string MainWinTitle{get{return mainWinTitle;}set{SetProperty(ref mainWinTitle, value);}}public DelegateCommand<string> NavigateCommand { get; set; }} }//ViewA.xaml <UserControl x:Class="WpfApp4.Views.ViewA"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:prism="http://prismlibrary.com/"xmlns:local="clr-namespace:WpfApp4.Views"mc:Ignorable="d" VerticalAlignment="Stretch"HorizontalAlignment="Stretch"prism:ViewModelLocator.AutoWireViewModel="True"><UserControl.Background><ImageBrush ImageSource="/Images/1.jpg"/></UserControl.Background><Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/><RowDefinition Height="Auto"/></Grid.RowDefinitions><TextBlock Grid.Row="0" Text="{Binding ViewAMsg}" FontSize="50"/><DataGrid Grid.Row="1" ItemsSource="{Binding BooksCollection,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"VirtualizingPanel.IsVirtualizing="True"VirtualizingPanel.VirtualizationMode="Recycling"VirtualizingPanel.CacheLength="100"VirtualizingPanel.CacheLengthUnit="Pixel"AutoGenerateColumns="False"><DataGrid.Background><ImageBrush ImageSource="/Images/1.jpg"/></DataGrid.Background><DataGrid.Resources><Style TargetType="DataGridCell"><Setter Property="FontSize" Value="30"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="FontSize" Value="50"/><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers></Style></DataGrid.Resources><DataGrid.Columns><DataGridTextColumn Binding="{Binding Id}"/><DataGridTextColumn Binding="{Binding Name}"/><DataGridTextColumn Binding="{Binding Author}"/><DataGridTextColumn Binding="{Binding ISBN}"/><DataGridTextColumn Binding="{Binding Title}"/><DataGridTextColumn Binding="{Binding Topic}"/> </DataGrid.Columns></DataGrid><Button Grid.Row="2" Content="View A Load Data"FontSize="50"Command="{Binding LoadDataCommand}"/></Grid></UserControl>//ViewAViewModel.cs using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using WpfApp4.Models; using WpfApp4.Services;namespace WpfApp4.ViewModels {public class ViewAViewModel:BindableBase{IIdService idService;IISBNService isbnService;public ViewAViewModel(IIdService idServiceValue,IISBNService isbnServiceValue){idService = idServiceValue;isbnService = isbnServiceValue;ViewAMsg = $"View A:{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss")}";LoadDataCommand = new DelegateCommand(LoadDataCommandExecuted);InitTimer();}private void InitTimer(){System.Timers.Timer tmr= new System.Timers.Timer();tmr.Interval = 1000;tmr.Elapsed += Tmr_Elapsed;tmr.Start();}private void Tmr_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){ViewAMsg = $"View A:{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss")}";}private void LoadDataCommandExecuted(){BooksCollection = new ObservableCollection<Book>();for(int i = 1; i < 1001; i++){BooksCollection.Add(new Book(){Id = idService.GetID(),Name = $"Name_{i}",ISBN=isbnService.GetISBN(),Title=$"Title_{i}",Topic=$"Topic_{i}"});}}public DelegateCommand LoadDataCommand { get; set; }private string viewAMsg;public string ViewAMsg{get{return viewAMsg; }set{SetProperty(ref viewAMsg, value);}}private ObservableCollection<Book> booksCollection;public ObservableCollection<Book> BooksCollection{get{return booksCollection;}set{SetProperty(ref booksCollection, value);}}} }//ViewB.xaml <UserControl x:Class="WpfApp4.Views.ViewB"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApp4.Views"mc:Ignorable="d" xmlns:prism="http://prismlibrary.com/"prism:ViewModelLocator.AutoWireViewModel="True"VerticalAlignment="Stretch"HorizontalAlignment="Stretch"><UserControl.Background><ImageBrush ImageSource="/Images/2.jpg"/></UserControl.Background><Grid><TextBlock Text="{Binding ViewBMsg,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"><TextBlock.Style><Style TargetType="TextBlock"><Setter Property="FontSize" Value="50"/><Setter Property="Foreground" Value="Black"/><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Setter Property="Foreground" Value="Red"/></Trigger></Style.Triggers></Style></TextBlock.Style></TextBlock></Grid> </UserControl>//ViewBViewModel.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WpfApp4.ViewModels {public class ViewBViewModel : BindableBase{public ViewBViewModel(){ViewBMsg = $"View B:{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss")}";InitTimers();}private void InitTimers(){System.Timers.Timer tmr = new System.Timers.Timer();tmr.Elapsed += Tmr_Elapsed;tmr.Interval = 1000;tmr.Start();}private void Tmr_Elapsed(object? sender, System.Timers.ElapsedEventArgs e){ViewBMsg = $"View B:{DateTime.Now.ToString("yyyy-MM-dd:HH-mm-ss")}";}private string viewBMsg;public string ViewBMsg{get{return viewBMsg;}set{SetProperty(ref viewBMsg, value);}}} }//IDService.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WpfApp4.Services {public interface IIdService{int GetID();}public class IdService : IIdService{int id = 0;public int GetID(){return Interlocked.Increment(ref id);}} }//ISBNService.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace WpfApp4.Services {public interface IISBNService{string GetISBN();}public class ISBNService : IISBNService{int idx = 0;public string GetISBN(){return $"ISBN_{Interlocked.Increment(ref idx)}_{Guid.NewGuid():N}";}} }