[WPF] Prismの初期設定

C# WPF
  • 2023/02/19

Prismを使ってMVVMのWPFアプリを作る時、いつも最初に行う設定を、備忘録として記録します。

新規プロジェクトの作成

プロジェクト作成時は、.Net FrameworkのWPFアプリを選択します。

image.png

Nugetパッケージのインストール

Nugetパッケージの管理画面から、Prism.Core, Prism.Unity, Prism.Wpfの3つをインストールします。

image.png

フォルダ構成の変更

Views, ViewModelsフォルダを作成します。
Modelを作る場合はModelsフォルダも追加しておきます。
MainWindow.xamlとMainWindow.xaml.csをViewsフォルダに移動します。
フォルダに合わせてnamespaceも修正しておきます。

namespace Sample04_PrismInitialization.Views
<Window x:Class="Sample04_PrismInitialization.Views.MainWindow"

また。ViewModelsフォルダにMainWindowsViewModel.csを追加します。
これでフォルダ構成は下記のようになります。

- Models
- ViewModels
    - MainWindowViewModel.cs
- Views
    - MainWindow.xaml
    - MainWindow.xaml.cs

ファイルの修正

各ファイルをそれぞれ修正していきます。

MainWindow.xaml

<Window x:Class="Sample04_PrismInitialization.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="MainWindow" Height="450" Width="800">
    <Grid>

    </Grid>
</Window>

App.xmal

<prism:PrismApplication x:Class="Sample04_PrismInitialization.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:prism="http://prismlibrary.com/"
             xmlns:local="clr-namespace:Sample04_PrismInitialization">
    <Application.Resources>

    </Application.Resources>
</prism:PrismApplication>

App.xaml.cs

using System.Windows;
using Sample04_PrismInitialization.Views;
using Prism.Ioc;

namespace Sample04_PrismInitialization
{
    public partial class App
    {
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }

        protected override void RegisterTypes(
            IContainerRegistry containerRegistry)
        {
        }
    }
}

この時点でApp.xaml.csにエラーが出る場合がありますが、その時は一度ビルドしてみてください。
ビルドは成功し、エラーも解消されます。
以上で、PrismでMVVMを実装する準備が整いました。

バインディングしてみる

それでは、実際にバインディングできるかどうか、確認してみます。
今回は簡単に"Hello"というLabelを表示させてみます。

MainWindow.xamlにLabelを追加します。

<Window x:Class="Sample04_PrismInitialization.Views.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Label Content="{Binding Hello}" />
    </Grid>
</Window>

MainWindowViewModel.csを下記のように変更します。
ViewModelではBindableBaseを継承します。
また、BindableBaseを使うためにPrism.Mvvmを追加します。

using Prism.Mvvm;

namespace Sample04_PrismInitialization.ViewModels
{
    internal class MainWindowViewModel : BindableBase
    {
        private string hello = "Hello";
        public string Hello
        {
            get { return hello; }
            set { SetProperty(ref hello, value); }
        }
    }
}

それではこのコードをビルドし、起動してみます。
下記のようにHelloと表示させることができ、ViewModelでバインディングできることが確認できました。 image.png

Profile

Hotaru

メーカーで組み込み系のソフトウェアやファームウェアの開発をしています。

仕事では主にC言語、Python、C#を使っています。 ...もっと見る