Using_Prism.Unity_with_WPF)?

PrismとUnityを使うWPFプロジェクトテンプレートを使ってみる

C#WPFXamlMVVMPRISM

7

PrismとUnityを使うWPFプロジェクトテンプレートを使ってみる

Visual Studioの拡張機能の「Prism Template Pack」

Prism Template Packには、WPFを構築するためのスニペット、アイテムテンプレート、およびプロジェクトテンプレートのコレクションと、Prismを使用するXamarin.Formsアプリケーションが含まれています。

注:Xamarin.Formsテンプレートをインストールするには、最新バージョンのXamarinが必要です。

とのこと。

まずは、ダウンロード•VisualStudio?を起動 •ツール > 拡張機能と更新プログラム を選択 •オンラインタブ > 検索条件に「Prism Template Pack」を入力 •検索が表示されたら「Prism Template Pack」をダウンロード •VisualStudio?を再起動するとインストールが始まります。

※2017/04/14に1.10が公開されています。VisualStudio2017にも対応している模様 WS000009.JPG

何ができる?

スニペット:•propp - BindableBase?に依存するバッキングフィールドを持つプロパティ ※通知を伝播させる時に使用 •cmd - プライベートセッターでDelegateCommand?プロパティ •cmdg - 汎用のDelegateCommand? プロパティ ※パラメータ有りのDelegateCommand?の場合に使用

スニペットの例:

↓これを入力
 
propp 

タブキー2打後
 
        private string fieldName;
        public string PropertyName
        {
            get { return fieldName; }
            set { SetProperty(ref fieldName, value); }
        }

アイテムテンプレート: •Prism ViewModel? - BindableBase?から派生し、デフォルトコンストラクタを持つViewModel? •Prism UserControl? - ViewModelLocator?を使用したUserControl? •Prism Window - ViewModelLocator?を使ったWindow

プロジェクトテンプレート:•Prism Module - WPF Prismアプリケーションにモジュールを追加するプロジェクト •Prism Autofac App - PrismとAutofacでWPFアプリケーションを構築するためのプロジェクトテンプレート •Prism Ninject App - PrismとNinjectを使用してWPFアプリケーションを構築するためのプロジェクトテンプレート •Prism StructureMap? App - PrismとStructureMap?を使用してWPFアプリケーションを構築するためのプロジェクトテンプレート •Prism Unity App - PrismとUnityを使ってWPFアプリケーションを構築するためのプロジェクトテンプレート

xamarinも対応していますが、ここでは説明省略。

今回は、Prism Unity Appを使用します。

プロジェクトの作成•新しいプロジェクト > テンプレート > Prism > WPF > Prism Unity App(WPF)を選択。 •プロジェクト名を入力

PrismUnityApp?.jpg こんな感じで、ディレクトリ構成やBootstrapperクラスも作ってくれます。

モジュールの追加•ソリューションを右クリック > 新しい項目 > Prism Module(WPF)を選択

WS000013.JPG

Prismモジュールを追加をするとこんな感じに

PrismUnityApp2.jpg

ちょっと作成

1.プロジェクトテンプレートでPrism Moduleを追加•上の方で説明しましたがモジュールもプロジェクトテンプレートがあるので、そちらから追加をしておけば、Viewsフォルダなんかも作られています。 •なので、ここでは、一旦ソリューションをリビルドします。

2.作成したPrism ModuleをWindowの方のプロジェクトで参照

3.Bootstrapperクラス•プロジェクトテンプレートでBootstrapper.csは、作成されているので、そちらに追記します。 • ConfigureModuleCatalog?で外部モジュールから呼び出すためのモジュール・カタログを作成します。

Bootstrapper.cs

using Microsoft.Practices.Unity; using Prism.Modularity; using Prism.Unity; using PrismUnityApp1.Views; using System.Windows;

namespace PrismUnityApp1 {

   class Bootstrapper : UnityBootstrapper
   {
       protected override DependencyObject CreateShell()
       {
           return Container.Resolve<MainWindow>();
       }
       protected override void InitializeShell()
       {
           Application.Current.MainWindow.Show();
       }
       protected override void ConfigureModuleCatalog()
       {
           base.ConfigureModuleCatalog();
           ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
           moduleCatalog.AddModule(typeof(PrismModule1.PrismModule1Module));
       }
   }

}

4.メインページの作成•Prismモジュールで作成したプロジェクトのViewsフォルダにUserControl?を作成します。WS000702.JPG •今回は、「MainView?」としています。

MainView?.xaml

UserControl? x:Class="PrismModule1.Views.MainView?"

            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:PrismModule1.Views"
            mc:Ignorable="d" 
            d:DesignHeight="300" d:DesignWidth="300">
   <Grid>
       <Grid.RowDefinitions>
           <RowDefinition Height="50"/>
           <RowDefinition Height="*"/>
       </Grid.RowDefinitions>
       <Grid Grid.Row="0" Background="Gray">
           <TextBlock VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Text="「Prism Template Pack」サンプル" FontSize="20" Foreground="White" Margin="10"/>
       </Grid>
       <Grid Grid.Row="1" >
           <DataGrid VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Margin="10"></DataGrid>
       </Grid>
   </Grid>

/UserControl?>

5.領域の作成•PrismModule1Module.csを開いて領域の作成を行います。 •ここでもPrism Moduleのプロジェクトテンプレートで作成した場合は、ある程度作成されているので、Initializeメソッドを修正します。

PrismModule1Module.cs

using Prism.Modularity; using Prism.Regions; using System;

namespace PrismModule1
{
    public class PrismModule1Module : IModule
    {
        IRegionManager _regionManager;
        public PrismModule1Module(IRegionManager regionManager)
        {
            _regionManager = regionManager;
        }
        public void Initialize()
        {
            //throw new NotImplementedException();
            _regionManager.RegisterViewWithRegion("ContentRegion", typeof(Views.MainView));
        }
    }
}

6.リビルドして、実行•はい、これでMainView?MainWindow?内に表示されることが確認できました。 •WS000704.JPG

まとめ プロジェクトテンプレートでちょこっとだけ手間が省けました。

とはいっても、いろいろと追記していかないといけないのですが、まず最初のディレクトリ構成を整えて、StartUp?消して、Bootstrapperクラスを作成して・・・

とかのめんどくささからは、少しだけ解放といったところでしょうか?

普段社内でWPFアプリケーションは、MEFを使っていて、Unityって触れたことがないので、今後は、これを使って何かやってみます。

ちなみに古い記事ですがこんなのがありました。 リンク:Unity vs. MEF

 この記事は以下の記事からリンクされています [WPF][XAML]MahApps?.Metroのタイルコントロールを使ったメニュー画面を作ってみるからリンク10ヶ月前 [WPF][XAML]InkCanvas?を使ってみるからリンク8ヶ月前 [WPF][XAML]VB-ReportのWPF 用ビューアコントロールを使ってみるからリンク7ヶ月前 [WPF][XAML]InkCanvas?TextBox?を追加してみるからリンク3ヶ月前

Reference

PrismとUnityを使うWPFプロジェクトテンプレートを使ってみる


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS