導入
データバインディングは、画面(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)を設定すると、その中のプロパティにバインドできる
詳細手順
- スターター
139-wpf-binding/starter.zipを開く(MainViewModelとDataContext設定済み) - F5で実行し、上の
TextBoxに入力すると下のTextBlockにリアルタイムで反映されることを確認する
INotifyPropertyChangedのPropertyChanged?.Invoke(...)の行をコメントアウトすると画面が更新されなくなることを試し、変更通知の役割を体感する
まとめ
- データバインディングで画面とデータを連動させる(
{Binding ...}) INotifyPropertyChanged+PropertyChanged発火で「変更を画面に通知」する- 通知しないと画面が更新されない(最頻出のハマりどころ)
次回: ボタン操作を扱う「イベントとコマンド」です。
テンプレート構成(教材制作用メモ)
139-wpf-binding/
└── starter.zip # INotifyPropertyChanged実装済みViewModel / バインディングするView / README