3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Template Studio for WPFで、Prismのサンプルをつくる

Posted at

この記事は

C# Japan - Discordにて、Visual Studio 2022でもPrismのテンプレートが使えると知った!

この記事は、実際にプロジェクトをつくってみたまでの話

Visual Studio 2022 拡張機能

メニュー > 拡張機能 > 拡張機能の管理

Visual Studio Marketplaceで検索

WPF用のTemplate Studioをダウンロード、インストールする

install.png

Visual Studioを再起動すると、Template Studio for WPFが選べるようになっている

template.png

(拡張機能をいろいろ漁っていたら、気分転換によさそうなテーマカラーを見つけたので、衣替えした)

プロジェクトをつくる

アラカルト的に基本レイアウトやテストフレームワークを選べる

  • プロジェクトの種類
    • ナビゲーションパネル
    • メニューバー
    • リボン
  • デザインパターン
  • ページ
    • ウェブビュー
    • リスト
    • グリッド
  • テスト

create.png

ナビゲーションとリストの組み合わせでつくった

こんなに選択肢があると思わなかった・・・

プロジェクトの構造

できあがったプロジェクト
ターゲットは.NET6になっている

TODOが6個書いてあるので、その箇所を変更するっぽい

Prism Full Appプロジェクトテンプレート1ではModulesServicesフォルダーにプロジェクトが配置さていたので、そこが違う
そもそもモジュールは使われていないようで、ConfigureModuleCatalogなどは別途追加する必要がありそう

first.png

F5で実行してみた結果

Animation1.gif

App.xaml.cs

protectedメソッドはおなじみ

インスタンス変数が_始まりであるのが、親近感がもてる

ASP.NETよろしくappsettings.jsonで構成をスイッチする

public partial class App : PrismApplication
{
    private string[] _startUpArgs;

    public App() { }

    protected override Window CreateShell() => Container.Resolve<ShellWindow>();

    protected override async void OnInitialized()
    {
        base.OnInitialized();
        await Task.CompletedTask;
    }

    protected override void OnStartup(StartupEventArgs e)
    {
        _startUpArgs = e.Args;
        base.OnStartup(e);
    }

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        // Core Services

        // App Services
        containerRegistry.Register<ISampleDataService, SampleDataService>();

        // Views
        containerRegistry.RegisterForNavigation<ListDetailsPage, ListDetailsViewModel>(PageKeys.ListDetails);
        containerRegistry.RegisterForNavigation<MainPage, MainViewModel>(PageKeys.Main);
        containerRegistry.RegisterForNavigation<ShellWindow, ShellViewModel>();

        // Configuration
        var configuration = BuildConfiguration();
        var appConfig = configuration
            .GetSection(nameof(AppConfig))
            .Get<AppConfig>();

        // Register configurations to IoC
        containerRegistry.RegisterInstance<IConfiguration>(configuration);
        containerRegistry.RegisterInstance<AppConfig>(appConfig);
    }

    private IConfiguration BuildConfiguration()
    {
        var appLocation = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
        return new ConfigurationBuilder()
            .SetBasePath(appLocation)
            .AddJsonFile("appsettings.json")
            .AddCommandLine(_startUpArgs)
            .Build();
    }

    private void OnExit(object sender, ExitEventArgs e) { }

    private void OnDispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
    {
        // TODO: Please log and handle the exception as appropriate to your scenario
        // For more info see https://docs.microsoft.com/dotnet/api/system.windows.application.dispatcherunhandledexception?view=netcore-3.0
    }
}

おわり

これは深堀りしがいがある。。。

参考

  1. Prism の Prism Full App (.NET Core) テンプレートを見てみよう

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?