shuhelohelo’s blog

Xamarin.Forms多めです.

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));//これ
            }
        }