0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なぜViewModelの値が画面に表示されるの?|WPF・MVVMのBindingを理解しよう

0
Posted at

WPF・MVVMを学び始めると、こんなコードをよく見かけます。

<TextBlock Text="{Binding UserName}" />

初めて見たとき、私はこう思いました。

「これだけで画面に表示されるの?」

UserNameはViewModelにあるだけなのに、画面には値が表示されています。

何か値を設定するコードを書いた覚えもありません。

今回は、Bindingの書き方ではなく、

「なぜViewModelの値が画面に表示されるのか」

という仕組みについて整理していきます。

Bindingとは?

Bindingは、

ViewとViewModelのデータを結び付ける仕組みです。

例えば、

<TextBlock Text="{Binding UserName}" />

と書くと、


ViewModel
    │
    │ UserName
    ▼
View(TextBlock.Text)

という関係が作られます。

つまり、

「Textプロパティには、ViewModelのUserNameを表示してください」

という意味になります。

Bindingを使わなくても画面は作れる

実は、Bindingを使わなくても画面へ値を表示することはできます。

例えば、

UserNameTextBlock.Text = ViewModel.UserName;

このようにコードから値を設定すれば、画面には正しく表示されます。

つまり、

Bindingがなくても画面は作れます。*

では、なぜWPFにはBindingという仕組みが用意されているのでしょうか?

Bindingを使わない場合のデメリット

例えば、画面に表示する項目が増えたとします。

NameTextBlock.Text = ViewModel.Name;
AgeTextBlock.Text = ViewModel.Age.ToString();
AddressTextBlock.Text = ViewModel.Address;
PhoneTextBlock.Text = ViewModel.Phone;
MailTextBlock.Text = ViewModel.Mail;

項目が増えるたびに、

表示するコードも増えていきます。

さらに、

・画面を表示するとき
・データを更新したとき
・初期表示するとき

など、それぞれで表示するコードを書く必要があります。

画面が大きくなるほど、

View側のコードはどんどん増えてしまいます。

なぜBindingを使うの?

そこで登場するのがBindingです。

<TextBlock Text="{Binding Name}" />
<TextBlock Text="{Binding Age}" />
<TextBlock Text="{Binding Address}" />

Bindingを使えば、

Viewには

「何を表示するか」

だけを書けばよくなります。

値を取得して画面へ表示する処理は、

WPFが自動で行ってくれます。

Bindingを使うメリット

Bindingを使うことで、

Viewは

「どのデータを表示するか」

だけを考えればよくなります。

一方、ViewModelは

「どんなデータを持つか」

だけを管理します。


View
「UserNameを表示したい」

        │

     Binding

        │

ViewModel
「UserNameは田中です」

このように、

ViewとViewModelの役割を分けられる

ことが、Bindingの大きなメリットです。

また、

・表示用のコードが減る
・保守しやすくなる
・Viewは表示だけ、ViewModelはデータだけを考えればよくなる

というメリットもあります。

デバッグするときはどこを見る?

画面に値が表示されないとき、

最初からBindingを書き直す必要はありません。

例えば、

Text="{Binding UserName}"

だった場合、

まず確認したいのは、

・ViewModelのUserNameに値が入っているか
・Binding先のプロパティ名が間違っていないか

です。

DataContextやPropertyChangedについては、

次回以降の記事で詳しく説明します。

まとめ

今回のポイントです。

✅BindingはViewとViewModelを結び付ける仕組み

✅Bindingを使わなくても画面は作れる

✅Bindingを使うことで表示処理をWPFに任せられる

✅ViewとViewModelの役割を分けられる

✅デバッグでは、まずViewModelの値を確認する

📚 WPF・MVVM基礎シリーズ

第1回
新人・初級PGが最初に覚えた方がいいこと|言語より先に理解したいプログラムの仕組み

第2回
WPF・MVVMで最初に覚えておきたいこと|プログラムは「データ」と「処理」だけでは動かない

第3回
ボタンを押したらなぜ処理が動くの?|WPF・MVVMのEventを理解しよう

第4回
✅ [ボタンを押したらなぜ画面が切り替わるの?|WPF・MVVMのCommandを理解しよう](https://qiita.com/k-shimaoka-dev/items/e41fa6cd06177106ed40)

第5回(今回)
👉 なぜViewModelの値が画面に表示されるの?|WPF・MVVMのBindingを理解しよう

📖 あわせて読みたい(実践編)

WPFでよくあるCommandハマりポイント3選+回避策
WPFのDataContextでハマるポイント3選【MVVM】実務で迷子にならないための整理
WPFで後から辛くなるバインディングの典型パターン3選 実務でハマる! 後悔しないための注意ポイントも解説

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?