Install-Package Prism.WPF;
Install-Package Prism.DryIOC;
//App.xaml
<prism:PrismApplication x:Class="WpfApp37.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp37"
xmlns:prism="http://prismlibrary.com/">
<Application.Resources>
</Application.Resources>
</prism:PrismApplication>
//App.xaml.cs
using System.Configuration;
using System.Data;
using System.Windows;
using Prism.DryIoc;
using Prism.Ioc;
using WpfApp37.ViewModels;
using WpfApp37.Views;
namespace WpfApp37
{
/// <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.RegisterForNavigation<ViewA, ViewAViewModel>("ViewA");
containerRegistry.RegisterForNavigation<ViewB, ViewBViewModel>("ViewB");
containerRegistry.RegisterForNavigation<MainWindow, MainWindowViewModel>("MainWindow");
containerRegistry.RegisterDialog<MessageBoxView, MessageBoxViewModel>("MessageBoxView");
}
protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
{
base.ConfigureRegionAdapterMappings(regionAdapterMappings);
}
protected override void OnInitialized()
{
base.OnInitialized();
var regionManager=Container.Resolve<IRegionManager>();
regionManager.RequestNavigate("MainRegion", "ViewA");
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
}
}
}
//ViewA.xaml
<UserControl x:Class="WpfApp37.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:local="clr-namespace:WpfApp37.Views"
mc:Ignorable="d"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
>
<Grid Margin="20">
<StackPanel>
<TextBlock Text="{Binding Message}"
FontSize="50"
FontWeight="Bold"
Foreground="Blue"/>
<Button Content="Click Me!"
Command="{Binding ClickCommand}"
Margin="0,10,0,0"
Padding="10"/>
<TextBlock Text="{Binding ClickCount}"
FontSize="50"
Margin="0,10,0,0"/>
</StackPanel>
</Grid>
</UserControl>
//ViewA.xaml.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp37.Views
{
/// <summary>
/// Interaction logic for ViewA.xaml
/// </summary>
public partial class ViewA : UserControl
{
public ViewA()
{
InitializeComponent();
}
}
}
//using System;
using System.Collections.Generic;
using System.Text;
namespace WpfApp37.ViewModels
{
public class ViewAViewModel: ViewModelBase
{
private int clickCount;
public int ClickCount
{
get
{
return clickCount;
}
set
{
SetProperty(ref clickCount, value);
}
}
private string message = "Welcome to View A!";
public string Message
{
get
{
return message;
}
set
{
SetProperty(ref message, value);
}
}
public DelegateCommand ClickCommand { get; set; }
public ViewAViewModel()
{
Title="View A";
ClickCommand=new DelegateCommand(ClickCommandExecuted);
}
private void ClickCommandExecuted()
{
ClickCount++;
Message=$"Button clicked {ClickCount} times";
}
}
}
//ViewB.xaml
<UserControl x:Class="WpfApp37.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:WpfApp37.Views"
mc:Ignorable="d"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<Grid Margin="20">
<Grid.RowDefinitions>
<RowDefinition Height="60"/>
<RowDefinition Height="*"/>
<RowDefinition Height="80"/>
</Grid.RowDefinitions>
<TextBlock Text="View B -Data Display"
Grid.Row="0"
FontSize="50"
FontWeight="Bold"/>
<DataGrid Grid.Row="1"
ItemsSource="{Binding Items,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
AutoGenerateColumns="False"
FontSize="30"
Margin="0,10,0,0"
VerticalAlignment="Stretch">
<DataGrid.Columns>
<DataGridTextColumn Header="Id" Binding="{Binding Id}"/>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="ISBN" Binding="{Binding ISBN}"/>
<DataGridTextColumn Header="Author" Binding="{Binding Author}"/>
</DataGrid.Columns>
</DataGrid>
<Button Grid.Row="2"
FontSize="50"
Content="Load Data"
Command="{Binding LoadDataCommand}"/>
</Grid>
</UserControl>
//ViewB.xaml.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfApp37.Views
{
/// <summary>
/// Interaction logic for ViewB.xaml
/// </summary>
public partial class ViewB : UserControl
{
public ViewB()
{
InitializeComponent();
}
}
}
//ViewBViewModel.cs
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using WpfApp37.Models;
namespace WpfApp37.ViewModels
{
public class ViewBViewModel:ViewModelBase
{
private ObservableCollection<Book> items;
public ObservableCollection<Book> Items
{
get
{
return items;
}
set
{
SetProperty(ref items, value);
}
}
public DelegateCommand LoadDataCommand { get; set; }
public ViewBViewModel()
{
Title="View B";
Items=new ObservableCollection<Book>();
LoadDataCommand=new DelegateCommand(LoadDataCommandExecuted);
}
private void LoadDataCommandExecuted()
{
Items.Clear();
for(int i = 1; i<1001; i++)
{
Items.Add(new Book()
{
Id=i,
Name=$"Name_{i}",
ISBN=$"ISBN_{i}_{Guid.NewGuid()}",
Author=$"Author_{i}_{Guid.NewGuid()}"
});
}
}
}
}
//mainView.xaml
<Window x:Class="WpfApp37.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:WpfApp37"
mc:Ignorable="d"
WindowState="Maximized"
Title="{Binding MainTitle}" Height="450" Width="800"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="100"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--Header-->
<StackPanel Grid.Row="0"
Orientation="Horizontal"
Background="LightBlue">
<TextBlock Text="{Binding Title}" FontSize="50" FontWeight="Bold"/>
<TextBlock Text="Prism DryIOC Application" Margin="10,0,0,0"/>
</StackPanel>
<!--Navigation Menu-->
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="10">
<Button Content="View A" Command="{Binding NavigateCommand}"
CommandParameter="ViewA"
Margin="5" Padding="10"/>
<Button Content="View B" Command="{Binding NavigateCommand}"
CommandParameter="ViewB"
Margin="5" Padding="10"/>
<Button Content="Show Dialog" Command="{Binding ShowDialogCommand}"
Margin="5" Padding="10"/>
</StackPanel>
<!--Content Region-->
<!--<Border Grid.Row="2" Margin="10" BorderBrush="DarkGray" BorderThickness="1"
Background="LightGray">
--><!-- Remove this background later --><!--
<ContentControl
prism:RegionManager.RegionName="MainRegion"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"/>
</Border>-->
<ContentControl Grid.Row="2"
prism:RegionManager.RegionName="MainRegion"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"/>
</Grid>
</Window>
//MainViewModel
<Window x:Class="WpfApp37.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:WpfApp37"
mc:Ignorable="d"
WindowState="Maximized"
Title="{Binding MainTitle}" Height="450" Width="800"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="100"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--Header-->
<StackPanel Grid.Row="0"
Orientation="Horizontal"
Background="LightBlue">
<TextBlock Text="{Binding Title}" FontSize="50" FontWeight="Bold"/>
<TextBlock Text="Prism DryIOC Application" Margin="10,0,0,0"/>
</StackPanel>
<!--Navigation Menu-->
<StackPanel Grid.Row="1" Orientation="Horizontal" Margin="10">
<Button Content="View A" Command="{Binding NavigateCommand}"
CommandParameter="ViewA"
Margin="5" Padding="10"/>
<Button Content="View B" Command="{Binding NavigateCommand}"
CommandParameter="ViewB"
Margin="5" Padding="10"/>
<Button Content="Show Dialog" Command="{Binding ShowDialogCommand}"
Margin="5" Padding="10"/>
</StackPanel>
<!--Content Region-->
<!--<Border Grid.Row="2" Margin="10" BorderBrush="DarkGray" BorderThickness="1"
Background="LightGray">
--><!-- Remove this background later --><!--
<ContentControl
prism:RegionManager.RegionName="MainRegion"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"/>
</Border>-->
<ContentControl Grid.Row="2"
prism:RegionManager.RegionName="MainRegion"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"/>
</Grid>
</Window>
//ViewModelBase.cs
using System;
using System.Collections.Generic;
using System.Text;
using Prism.Mvvm;
using Prism.Commands;
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace WpfApp37.ViewModels
{
public class ViewModelBase :BindableBase
{
private string title = "Prism Application";
public string Title
{
get
{
return title;
}
set
{
SetProperty(ref title, value);
}
}
private bool isBusy;
public bool IsBusy
{
get
{
return isBusy;
}
set
{
SetProperty(ref isBusy, value);
}
}
}
}
//book.cs
using System;
using System.Collections.Generic;
using System.Text;
namespace WpfApp37.Models
{
public class Book
{
public int Id { get;set; }
public string Name { get;set; }
public string ISBN { get;set; }
public string Author { get; set; }
}
}
![image]()
![image]()