WPF+MVVMToolkitのプロジェクトをMAUIに移行してみた

730 Views

September 30, 22

スライド概要

「【オンライン】MAUI に注目する C# Tokyo イベント」で発表した資料です。
https://csharp-tokyo.connpass.com/event/259233/

profile-image

会社勤めのSE・プログラマです。個人としての情報発信も行っており、このアカウントはその用途で使用します。同一ID「suusanex」でGitHub・はてな等でも発信しています。

シェア

埋め込む »CMSなどでJSが使えない場合

各ページのテキスト
1.

WPF+GenericHost+MVVM Toolkitのプロジェクトを MAUIに移行してみた 2022/9/30 須藤(suusanex)

2.

自己紹介  ID:suusanex( connpass・Twitter・GitHub共通)  名前:須藤圭太  サイエンスパーク株式会社という独立系ソフトウェアベンダーに所属  4年ほど受託開発で、上流から下流まで全部を回す  ここ8年ほどは、自社製品開発も担当  Windowsアプリ開発のネタが多い  勉強会もやってます。  https://sciencepark.connpass.com

3.

概要  いままで  WPF+GenericHostなコードをTemplateStudioで作成したり  WinUI3+GenericHostへWPFを移植したりしてみた  では  WPF+GenericHostなコードをMAUIに移植できるか?  ↓  GenericHostやMVVMの考え方は同じなので、割と容易に移行できる

4.

ポイント  GenericHostのIHostBuilderはMauiAppBuilderになっているが使い方は同じ  CommunityToolkit.Mvvmを使ったViewModelの実装はそのまま使える  xamlは手動で実装し直し  TemplateStudioによる生成コード(PageのNavigation周り)はだいぶ違うので、 多分作り直した方が良い  ↓  新規のMAUIプロジェクトにViewModelとModelだけを移植した方が速そう

5.

MAUIプロジェクトを作成してコードを移 す  WPFから、ViewModelとModelのコードだけを移す  図はTemplateStudioで生成したプロジェクトの場合  NuGetでCommunityToolkit.Mvvmを入れる  そのままビルドが通る(はず)

6.

DI部分を移す  Microsoft.Extension.DepenencyInjectionを使っている前提で説明  ほとんど同じなのでそのまま移植可能 WPF(GenericHost) _host = Host.CreateDefaultBuilder(e.Args) .ConfigureServices(ConfigureServices) private void ConfigureServices(HostBuilderContext context, IServiceCollection services) { //以下、コンテナ登録のコード services.AddTransient<MainPage>(); ・・・ MAUI builder .UseMauiApp<App>() .ConfigureServices() public static MauiAppBuilder ConfigureServices(this MauiAppBuilder mauiAppBuilder) { //以下、コンテナ登録のコード mauiAppBuilder.Services.AddTransient<MainPage>(); ・・・

7.

xaml部分の例  仕様が違うので、これは書き直すしかない  単純に対応付けができるものなら、置き換えれば同じViewModelで動く WPF(GenericHost) MAUI <Button Content="TextAdd" Command="{Binding TextAdd}"/> <TextBox Text="{Binding MainText}"></TextBox> <Button Text="TextAdd" Command="{Binding TextAdd}"/> <Entry Text="{Binding MainText}"></Entry>

8.

まとめ  ちゃんと画面とロジック(ViewとViewModelなど)を分離しておけば、MAUIへ の移行は容易そう  WPFプロジェクトのMAUI移植が将来の視野に入る場合、  まずはWPFのままでGenericHostやMVVM Toolkitを導入してリファクタリングし ておくと、移植しやすそう