MakViewModelBase Ver. 5.4.0 及び MakViewModelBaseCore Ver. 1.1.0 を NuGet に公開しました。
ソースプログラムは GitHub で MakViewModelBase, MakViewModelBaseCore それぞれ公開しています。
変更点は次のとおりです。
- WeakEventViewModelBase の実装を見直し、System.Windows.IWeakEventListener インターフェイスを実装するようにした。
以前の実装では、PropertyChangedWeakEventListener クラスからビューモデルへの強い参照があり、不要になったビューモデルがスムーズに破棄されないという問題がありました(この実装を書いた際に違和感があったのですが、追求していませんでした)。この変更により WeakEventViewModelBase が IWeakEventListener インターフェイスを持つことでイベント ソース(イベントを発生させるオブジェクト)とイベント リスナー(イベントが発生した際に特定の処理を行うオブジェクト(この場合はビューモデル))の関係がすっきりとし、強い参照の発生を避けることができます。
ただ、以前の WeakEventViewModelBase の機能を利用していた場合には、破壊的変更となっています。
- WeakEventViewModelBase.AddListener(INotifyPropertyChanged notifyObject, IWeakEventListener weakEventListener) メソッドは無くなりました。
- WeakEventViewModelBase.RemoveListener(INotifyPropertyChanged notifyObject, IWeakEventListener weakEventListener)メソッドは無くなりました。
- INotifyWeakPropertyChanged インターフェイスは無くなりました。
- IPropertyChangedWeakEventListener インターフェイスは無くなりました。
- PropertyChangedWeakEventListener クラスは無くなりました。
WeakEventViewModelBase クラスの利用例については、GitHub にあるソースコードの WeakEventViewModelBaseTestApp プロジェクトをご覧ください(サービス層のオブジェクトがイベント ソースとなり、 MainWindow と 1つのモーダルウィンドウを持つアプリケーションの例になっています(TransitionViewModelBase は使わずに MainWindowViewModel から ShowDialog させています))。