shuhelohelo’s blog

Xamarin.Forms多めです.

Xamarin.FormsでINotifyPropertyChangedの実装方法メモ

qiita.com

こちら↑の記事にとてもよくまとまっている.

ここでは,基本的な実装の形をメモとして残す.

    public class Message : INotifyPropertyChanged
    {
        private string _text;
        public string Text
        {
            get => _text;
            set
            {
                _text = value;
                OnPropertyChanged(nameof(Text));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName]string propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }

MainPageなどContentPageを継承しているクラスはOnPropertyChanged,PropertyChangedが実装されているので実装は不要.

ObservableCollectionはそれ自体が通知機能が実装されているので,通知処理を書かなくてよい,というわけではなかった.

ObservableCollectionは要素の増減,変更の通知をそれ自体が行うが,ObservableCollection自体の変更通知は行わない.例えば以下のような変更は,OnPropertyChangedを使って通知を行う必要がある.

collection.Clear()
//とか
collection = new ObservableCollection();
//など

こういったプロパティ自体の変更に対する通知を書いておかないと,collection = new ObservableCollection()が行われた後,要素の増減や変更といった変更通知も行われなくなるようだ.