LoginSignup
0
1

More than 1 year has passed since last update.

FAC製作記 その4 MVVMフレームワークをPrismからCommunityToolkit.Mvvmに変更する

Posted at

はじめに

この記事は筆者のブログ記事 FAC製作記 その4 MVVMフレームワークをPrismからCommunityToolkit.Mvvmに移行する のソースコードを掲載するためのものです。
ブログ記事も合わせてご覧いただけると幸いです。

環境

OS : Windows 10 Home
.NET : Prismは5、ComunityToolkit.Mvvmは6

Prism.Unityを使用したとき

Visual StudioのPrismテンプレートは使用していません。
こちらのページを参考にしたと記憶しています。

App.xaml
<prism:PrismApplication x:Class="FurAffinityClassifier.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:FurAffinityClassifier">
    <Application.Resources>
    </Application.Resources>
</prism:PrismApplication>
App.xaml.cs
namespace FurAffinityClassifier
{
    public partial class App
    {
        protected override Window CreateShell()
        {
            return Container.Resolve<MainWindow>();
        }

        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // DIの設定
            containerRegistry.Register<IAppModel, AppModel>();
            containerRegistry.Register<ISettingsModel, SettingsModel>();
            containerRegistry.Register<IClassificationModel, ClassificationModel>();

            containerRegistry.Register<IDialogHelper, DialogHelper>();
        }
    }
}
MainWindow.xaml
<Window x:Class="FurAffinityClassifier.Views.MainWindow"
        xmlns:prism="http://prismlibrary.com/"
        prism:ViewModelLocator.AutoWireViewModel="True">
<!--以下略-->
</Window>
MainWindowViewModel.cs
namespace FurAffinityClassifier.ViewModels
{
    /// <summary>
    /// メイン画面のViewModel
    /// </summary>
    public class MainWindowViewModel : BindableBase, IDisposable
    {
    // (以下略)
    }
}

CommunityToolkit.Mvvmを使用したとき

こちらのページを参考にしました。

App.xaml
<Application x:Class="FurAffinityClassifier.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:FurAffinityClassifier"
             xmlns:vm="clr-namespace:FurAffinityClassifier.ViewModels"
             StartupUri="Views/MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <local:Locator x:Key="Locator" />
        </ResourceDictionary>
    </Application.Resources>
</Application>
App.xaml.cs
using System.Windows;

namespace FurAffinityClassifier
{
    public partial class App : Application
    {
    }
}
Locator.cs
using System;
using FurAffinityClassifier.Helpers;
using FurAffinityClassifier.Models;
using FurAffinityClassifier.ViewModels;
using Microsoft.Extensions.DependencyInjection;

namespace FurAffinityClassifier
{
    public class Locator
    {
        private readonly IServiceProvider serviceProvider;

        public Locator()
        {
            // DIの設定
            ServiceCollection services = new();

            services.AddTransient<MainWindowViewModel>();
            services.AddTransient<ClassifyAsSettingWindowViewModel>();

            services.AddTransient<IMainWindowModel, MainWindowModel>();
            services.AddTransient<IClassifyAsSettingWindowModel, ClassifyAsSettingWindowModel>();
            services.AddSingleton<ISettingsModel, SettingsModel>();
            services.AddTransient<IClassificationModel, ClassificationModel>();

            services.AddTransient<IDialogHelper, DialogHelper>();

            serviceProvider = services.BuildServiceProvider();
        }

        public MainWindowViewModel MainWindowViewModel => serviceProvider.GetRequiredService<MainWindowViewModel>();

        public ClassifyAsSettingWindowViewModel ClassifyAsSettingWindowViewModel => serviceProvider.GetRequiredService<ClassifyAsSettingWindowViewModel>();
    }
}
MainWindow.xaml
<Window x:Class="FurAffinityClassifier.Views.MainWindow"
        DataContext="{Binding Source={StaticResource Locator}, Path=MainWindowViewModel}">
<!--以下略-->
</Window>
MainWindowViewModel.cs
namespace FurAffinityClassifier.ViewModels
{
    /// <summary>
    /// メイン画面のViewModel
    /// </summary>
    public class MainWindowViewModel : ObservableObject, IDisposable
    {
    // (以下略)
    }
}
0
1
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
0
1