diff --git a/src/generic/datavgen.cpp b/src/generic/datavgen.cpp index 2d0153b196..90fc24a024 100644 --- a/src/generic/datavgen.cpp +++ b/src/generic/datavgen.cpp @@ -5889,6 +5889,14 @@ bool wxDataViewCtrl::Enable(bool enable) bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model ) { + if (wxDataViewModel* const oldModel = GetModel()) + { + // Remove the notifier from the model before calling the base class + // version which may (or not) delete the model. + oldModel->RemoveNotifier( m_notifier ); + m_notifier = nullptr; + } + if (!wxDataViewCtrlBase::AssociateModel( model )) return false; @@ -5897,14 +5905,6 @@ bool wxDataViewCtrl::AssociateModel( wxDataViewModel *model ) m_notifier = new wxGenericDataViewModelNotifier( m_clientArea ); model->AddNotifier( m_notifier ); } - else - { - // Our previous notifier has either been already deleted when the - // previous model was DecRef()'d in the base class AssociateModel() or - // is not associated with us any more because if the model is still - // alive, it's not used by this control. - m_notifier = nullptr; - } m_clientArea->DestroyTree();