【C#】【WPF】令和の今、MVVMならCaliburn.Microが良いです(^^♪


MVVM開発について考えました(^^♪

Livet開発終了です。

MVVM Light、DialogMessage提供終了です。

Prism、プレーンすぎて、作らなければいけないことが多すぎです。

そして、令和の今、MVVMならCaliburn.Microが良いです!(^^)!

では、さっそく、サンプルを作ってみましょう(^^♪

(1)新しいプロジェクトを作成します。


(2)NuGetパッケージの管理で、Caliburn.Micro.Startをインストールする。


(3)App.xamlを書き換える。

App.xaml
<Application x:Class="CMSample.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:CMSample"
             >
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary>
                    <local:AppBootstrapper x:Key="bootstrapper" />
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>

(4)ビルドして、実行する。はい、動きました(^^♪

(5)今度は、より実践的にしてみましょう。

ViewsViewModelsModelsの3つのフォルダを作ります。
そして、IShell.cs、ShellViewModel.csを、ViewModelsフォルダにドラッグ&ドロップします。
そして、ShellView.xamlを、Viewsフォルダにドラッグ&ドロップします。

(6)ビルドして、実行する。はい、動きました。

(7)それでは、いよいよ本番です!(^^)!

(8)ViewsフォルダのShellView.xamlの削除

(9)プロジェクトに、ShellView.xamlを作成する。



(10)プロジェクトのShellView.xamlを、Viewsフォルダにドラッグ&ドロップする。

(11)IShell.csを書き換えます。

IShell.cs
namespace CMSample {
    public interface IShell
    {
        //名前、プロパティ
        string P_s_名前 { get; set; }

        //名前があるか、プロパティ
        bool P_b_名前があるか { get; }

        //名前を言え、メソッド
        void 名前を言え();
    }
}

(12)ShellViewModel.csを書き換えます。

ShellViewModel.cs
using System.Windows;

namespace CMSample {
    public class ShellViewModel : Caliburn.Micro.PropertyChangedBase, IShell
    {
        //名前、プロパティ
        private string m_s_名前;
        public string P_s_名前
        {
            get => m_s_名前;

            set
            {
                m_s_名前 = value;
                NotifyOfPropertyChange(() => P_s_名前);
            }
        }

        //名前があるか、プロパティ
        public bool P_b_名前があるか => !string.IsNullOrWhiteSpace(P_s_名前);

        //名前を言え、メソッド
        public void 名前を言え()
        {
            if (P_b_名前があるか)
                MessageBox.Show($"こんにちは、{P_s_名前}さん");
            else
                MessageBox.Show($"名前を入力してください", "お願い",
                    MessageBoxButton.OK, MessageBoxImage.Exclamation);
        }

    }
}

(13)ShellView.xamlを書き換えます。

ShellView.xaml
<Window x:Class="CMSample.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CMSample"
        mc:Ignorable="d"
        xmlns:cm ="http://www.caliburnproject.org"
        Width="300" Height="180"
        Title="CMサンプル">
    <Grid>
        <StackPanel Margin="10">

            <Label Content="お名前を入力してください"/>

            <TextBox
                Margin="11,0"
                Text="{Binding P_s_名前, UpdateSourceTrigger=PropertyChanged}"/>

            <Button
                Margin="11,10,11,0"
                IsDefault ="true"
                Content="返答"
                cm:Message.Attach="名前を言え"/>

        </StackPanel>
    </Grid>
</Window>

(14)ビルドして、実行します。

(15)名前を入れないで、返答ボタンを押します。怒られます。

(16)名前を入れて、返答ボタンを押します。

(17)最後に、お掃除します。

MainWindow.xamlと、ShellView.xaml.csと、App.xaml.csを、必要がなくなったので、削除します。

サンプルの作成は、以上です。

読んでくださって、ありがとうございました(^^)/