WPFでオブジェクトのプロパティをデータバインディングする方法
WPFでは、データバインディングを使ってオブジェクトのプロパティをバインドできます。
まず、対象がINotifyPropertyChangedインターフェースを実装していることを確認します。このインターフェースは、プロパティの値が変化したときにバインドされたUIコントロールに通知するPropertyChangedイベントを定義しています。
XAML では、Binding マークアップを使用してオブジェクトのプロパティにバインディングできます。例えば、TextBlock の Text プロパティを ViewModel の Name プロパティにバインドしたい場合、次のようになります。
<TextBlock Text="{Binding Name}" />
次にコードでViewModelのインスタンスにDataContextを設定することで、ViewModelのプロパティとXAMLのコントロールのバインディングが可能になります。
ViewModel viewModel = new ViewModel();
DataContext = viewModel;
最後に、ViewModelではプロパティのセッターで `PropertyChanged` イベントを確実にトリガーして、バインドされたUIコントロールにプロパティの値が変更されたことを通知します。
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged(nameof(Name));
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
ViewModelのNameプロパティ値が変更されると、バインドされているTextBlockのTextプロパティが自動的に更新されます。