DataBindingの注意点
プロパティの変更通知における基本をメモしておく.
例えば以下のプロパティがあったとする.
private string _firstName; public string FirstName { get => _firstName; set { if(_firstName==value) { return; } _firstName = value; OnPropertyChanged(nameof(FirstName)); } } private string _lastName; public string LastName { get => _lastName; set { if (_lastName == value) { return; } _lastName = value; OnPropertyChanged(nameof(LastName)); } } public string FullName { get => $"{FirstName} {LastName}"; }
これらはViewとバインディングされているが,FirstNameとLastNameが変更されたとき,View側のFullNameも更新されるかというと,更新されない.FullNameプロパティの更新通知は行われていないから.
FirstNameとLastNameのsetter両方にFullNameの更新通知を入れる必要がある.
private string _firstName; public string FirstName { get => _firstName; set { if(_firstName==value) { return; } _firstName = value; OnPropertyChanged(nameof(FirstName)); OnPropertyChanged(nameof(FullName));//これ } } private string _lastName; public string LastName { get => _lastName; set { if (_lastName == value) { return; } _lastName = value; OnPropertyChanged(nameof(LastName)); OnPropertyChanged(nameof(FullName));//これ } }