32
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

C# で MVVM を学ぶならまずこれ!CommunityToolkit.Mvvm で理解する基本の流れ

32
Posted at

「MVVMって聞いたことあるけど、結局どう使えばいいの?」
「ViewModel と Model の違いがよく分からない…」

そんなふうに感じたことはありませんか。
この記事では、C# × MVVM をこれから学びたい人に向けて、できるだけシンプルに、そして“実際に手を動かせる形”で紹介していきます。

今回は Microsoft 公式の CommunityToolkit.Mvvm を使って、
「MVVMってこういうことか」
と腑に落ちるところまで一緒に進んでいきましょう。


1. MVVM の役割をまずは整理しよう

MVVM は名前だけ聞くと難しそうですが、役割はとてもシンプルです。

  • Model:アプリの“中身”。データやビジネスロジック
  • ViewModel:画面と Model の橋渡し役
  • View:UI(XAML)

よくある誤解として
「ViewModel が全部のロジックを持つ」
というものがありますが、これは正しくありません。

ViewModel の役割はあくまで
“画面に必要な状態を整えること”
であり、ビジネスロジックは Model に置くのが基本です。


▼ 全体の流れ(Model → ViewModel → View)

まずは MVVM の関係を図でイメージしてみましょう。

この図の流れを、これから実際のコードで確認していきます。


2. CommunityToolkit.Mvvm を選ぶ理由

MVVM フレームワークは色々ありますが、
「まずはこれを使っておけば間違いない」
と言えるのが CommunityToolkit.Mvvm です。

  • Microsoft公式で安心
  • 軽量で覚えることが少ない
  • Source Generator でコードが自動生成される
  • MVVM の本質だけに集中できる

特に、INotifyPropertyChanged を自分で書かなくていいのは大きなメリットです。


3. Model → ViewModel → View の流れを実装してみよう

ここからは、MVVM の3つの役割が“どう連携するのか”を実際のコードで見ていきます。


◆ Model:アプリの中身を担当するクラス

まずは Model から。
今回は「メッセージを返すだけ」のシンプルなサービスを用意します。

public class MessageService
{
    public string GetMessage()
    {
        return "Hello from Model!";
    }

    public string GetUpdatedMessage()
    {
        return "Updated at " + DateTime.Now.ToString("HH:mm:ss");
    }
}

Model のポイントは
UI のことを一切知らない
ということ。

View や ViewModel の存在を知らなくても動くのが理想です。


◆ ViewModel:Model と View の橋渡し役

次に ViewModel。
ここで CommunityToolkit.Mvvm の便利さが光ります。

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;

public partial class MainViewModel : ObservableObject
{
    private readonly MessageService _messageService;

    public MainViewModel()
    {
        _messageService = new MessageService();
        Message = _messageService.GetMessage();
    }

    [ObservableProperty]
    private string message;

    [RelayCommand]
    private void UpdateMessage()
    {
        Message = _messageService.GetUpdatedMessage();
    }
}

ここでのポイントは3つ。

✔ 1. Model を注入して使う

ViewModel が MessageService を利用しています。
これが「橋渡し役」としての ViewModel の仕事です。

✔ 2. ObservableProperty

[ObservableProperty] を付けるだけで

  • プロパティ
  • バッキングフィールド
  • PropertyChanged 通知
    が自動生成されます。

✔ 3. RelayCommand

[RelayCommand] を付けるだけで

  • ICommand の実装
  • UpdateMessageCommand の自動生成
    が行われます。

◆ View(XAML):UI に専念する

最後に View。
View はロジックを持たず、ただ ViewModel の値を表示するだけです。

<StackPanel>
    <TextBlock Text="{Binding Message}" FontSize="20" />
    <Button Content="更新" Command="{Binding UpdateMessageCommand}" />
</StackPanel>

ボタンを押すと
→ ViewModel の UpdateMessageCommand が実行され
→ Model から新しいメッセージを取得し
→ TextBlock に反映される

この流れが MVVM の基本です。


4. ここまでで MVVM の役割が見えてきたはず

整理するとこうなります。

役割 何をする? 何をしない?
Model データ・ビジネスロジック UI のことは知らない
ViewModel Model を使って画面用の状態を作る UI の描画はしない
View UI の表示 ロジックを書かない

この分離ができると

  • コードが読みやすくなる
  • テストしやすくなる
  • 画面が増えても破綻しにくい

といったメリットが生まれます。


5. 実務で MVVM を運用するコツ

実際に MVVM を使っていて感じたポイントです。

  • ViewModel にロジックを詰め込みすぎない
  • Model(サービス)に処理を逃がす
  • ディレクトリ構成を決めておく
  • Binding エラーは Output で必ず確認する
  • コマンドやプロパティが増えたら分割を検討する

MVVM は「正しく分ける」ことが大切です。


6. まとめ

この記事では、
Model → ViewModel → View の流れが分かる MVVM の最小実装
を紹介しました。

  • MVVM は UI とロジックを分離する設計パターン
  • CommunityToolkit.Mvvm は最小構成で MVVM を実現できる
  • Model を入れると役割が明確になり理解が深まる

もし「MVVM をちゃんと理解したい」と思っているなら、
まずはこの記事のコードを動かしてみてください。
きっと、MVVM の世界がぐっと身近に感じられるはずです。


32
9
2

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
32
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?