MVVMの基礎クラスとしてINotifyPropertyChangedから派生させた、BindableBase(汎用)とViewModelBase(ViewModel用)を実装しました。
ViewModelBaseはマルチスレッドも対応しています。通知を送る際にサブスレッドであればメインスレッドで通知を呼び出すようになっています。
public class SampleModel : BindableBase {
private string _Title;
public string Title {
get => _Title;
set => SetProperty(ref _Title, value, TitleChanged);
}
protected void TitleChanged(string newValue, string oldValue) {
// TODO
}
}public class SampleViewModel : ViewModelBase<SampleModel> {
public string Title {
get => Model.Title;
set => Model.Title = value;
}
protected override void Model_PropertyChanged(object sender, PropertyChangedEventArgs e) {
switch (e.PropertyName) {
case nameof(SampleModel.Title):
RaisePropertyChanged(nameof(Title));
break;
}
}
}