本文へスキップ
BecomeCoder

C# WPFコース · 第1章 WPF ― デスクトップアプリ開発 · レッスン11

データバインディング

ブラウザで完結

導入

データバインディングは、画面(View)のコントロールとC#のデータ(プロパティ)を連動させる仕組みです。データを変えれば画面が自動更新され、画面の入力がデータに反映されます。WPFの心臓部であり、次章のMVVMの土台です。

図解

flowchart LR
    UI["TextBox Text={Binding UserName}"] <-->|双方向バインディング| PROP["C♯プロパティ UserName"]
    PROP -->|変更通知 INotifyPropertyChanged| UI
    style PROP fill:#e8f5e9

XAMLサンプル(読み物)

<!-- View側: {Binding プロパティ名} でデータと結びつける -->
<StackPanel Margin="20">
    <TextBox Text="{Binding UserName, Mode=TwoWay}" />
    <TextBlock Text="{Binding UserName}" />   <!-- 上の入力がここに即反映される -->
</StackPanel>
// データ側: 変更を画面に伝えるため INotifyPropertyChanged を実装する
public class MainViewModel : INotifyPropertyChanged
{
    private string _userName = "";
    public string UserName
    {
        get => _userName;
        set
        {
            _userName = value;
            // 「このプロパティが変わった」と画面へ通知する(これがないと画面が更新されない)
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(UserName)));
        }
    }

    public event PropertyChangedEventHandler? PropertyChanged;
}
  • {Binding プロパティ名}でコントロールとプロパティを結びつける
  • Mode=TwoWayで双方向(入力もデータへ反映)。既定は片方向のコントロールもある
  • **INotifyPropertyChanged**を実装し、PropertyChangedを発火しないと「データを変えても画面が更新されない」——ここが最頻出のハマりどころ
  • DataContext(画面のViewModel)を設定すると、その中のプロパティにバインドできる

詳細手順

  1. スターター139-wpf-binding/starter.zipを開く(MainViewModelDataContext設定済み)
  2. F5で実行し、上のTextBoxに入力すると下のTextBlockにリアルタイムで反映されることを確認する
実行したWPFアプリでTextBoxに入力するとTextBlockに同じ文字が即座に表示される様子
双方向バインディング:入力が即座に別コントロールへ反映
  1. INotifyPropertyChangedPropertyChanged?.Invoke(...)の行をコメントアウトすると画面が更新されなくなることを試し、変更通知の役割を体感する

まとめ

  • データバインディングで画面とデータを連動させる({Binding ...}
  • INotifyPropertyChangedPropertyChanged発火で「変更を画面に通知」する
  • 通知しないと画面が更新されない(最頻出のハマりどころ)

次回: ボタン操作を扱う「イベントとコマンド」です。

テンプレート構成(教材制作用メモ)

139-wpf-binding/
└── starter.zip   # INotifyPropertyChanged実装済みViewModel / バインディングするView / README

実際に動かしてみよう

下のエディタに XAML を書くと、右側のプレビューにその場で WPF 風のUIが描画されます。テキスト入力・チェック・選択はそのまま動き、`{Binding}` で結んだ TextBox と TextBlock は打った文字がリアルタイムで反映されます。本文の XAML を打ち込んだり、属性(Width・Margin・FontSize・色など)を書き換えたりして、レイアウトの変化を確かめながら進めましょう(C# のコードビハインドや Command、ItemsSource などC#側のデータに依存する処理は実行されません。それらは Visual Studio で試します)。

XAML (WPF) プレビュー

書いた XAML をその場で WPF 風の画面に描画する学習用プレビューを読み込みます(本物のWPFではなく、レイアウトとコントロールの見た目・{Binding}の双方向バインディングを再現したものです。C#のコードビハインド/Command は実行されません)。
スクロールして表示された時点でも自動で読み込まれます。