[WPF] Prismの初期設定
Prismを使ってMVVMのWPFアプリを作る時、いつも最初に行う設定を、備忘録として記録します。
新規プロジェクトの作成
プロジェクト作成時は、.Net FrameworkのWPFアプリを選択します。
Nugetパッケージのインストール
Nugetパッケージの管理画面から、Prism.Core, Prism.Unity, Prism.Wpfの3つをインストールします。
フォルダ構成の変更
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でバインディングできることが確認できました。