8
13

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 3 years have passed since last update.

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

Last updated at Posted at 2020-01-29

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

Livet開発終了です。

MVVM Light、DialogMessage提供終了です。

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

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

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

###(1)新しいプロジェクトを作成します。
10.jpg
20.jpg
###(2)NuGetパッケージの管理で、Caliburn.Micro.Startをインストールする。
30.jpg
40.jpg

###(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)ビルドして、実行する。はい、動きました(^^♪
70.jpg
###(5)今度は、より実践的にしてみましょう。
ViewsViewModelsModelsの3つのフォルダを作ります。
そして、IShell.cs、ShellViewModel.csを、ViewModelsフォルダにドラッグ&ドロップします。
そして、ShellView.xamlを、Viewsフォルダにドラッグ&ドロップします。
100.jpg
###(6)ビルドして、実行する。はい、動きました。
110.jpg
###(7)それでは、いよいよ本番です!(^^)!
###(8)ViewsフォルダのShellView.xamlの削除
140.jpg

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

###(10)プロジェクトのShellView.xamlを、Viewsフォルダにドラッグ&ドロップする。
100.jpg
###(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)ビルドして、実行します。
200.jpg
###(15)名前を入れないで、返答ボタンを押します。怒られます。
220.jpg
###(16)名前を入れて、返答ボタンを押します。
210.jpg
###(17)最後に、お掃除します。
MainWindow.xamlと、ShellView.xaml.csと、App.xaml.csを、必要がなくなったので、削除します。
###サンプルの作成は、以上です。
##読んでくださって、ありがとうございました(^^)/

8
13
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
8
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?