+All other models derive from it and must implement its
+pure virtual functions in order to define a complete
+data model. In detail, you need to override
+\helpref{IsContainer}{wxdataviewmodeliscontainer},
+\helpref{GetParent}{wxdataviewmodelgetparent},
+\helpref{GetChildren}{wxdataviewmodelgetchildren},
+\helpref{GetColumnCount}{wxdataviewmodelgetcolumncount},
+\helpref{GetColumnType}{wxdataviewmodelgetcolumntype} and
+\helpref{GetValue}{wxdataviewmodelgetvalue} in order to
+define the data model which acts as an interface between
+your actual data and the wxDataViewCtrl. Since you will
+usually also allow the wxDataViewCtrl to change your data
+through its graphical interface, you will also have to override
+\helpref{SetValue}{wxdataviewmodelsetvalue} which the
+wxDataViewCtrl will call when a change to some data has been
+commited.
+
+wxDataViewModel (as indeed the entire wxDataViewCtrl
+code) is using \helpref{wxVariant}{wxvariant} to store data and
+its type in a generic way. wxVariant can be extended to contain
+almost any data without changes to the original class.
+
+The data that is presented through this data model is expected
+to change at run-time. You need to inform the data model when
+a change happened. Depending on what happened you need to call
+one of the following methods:
+\helpref{ValueChanged}{wxdataviewmodelvaluechanged},
+\helpref{ItemAdded}{wxdataviewmodelitemadded},
+\helpref{ItemDeleted}{wxdataviewmodelitemdeleted},
+\helpref{ItemChanged}{wxdataviewmodelitemchanged},
+\helpref{Cleared}{wxdataviewmodelcleared}. There are
+plural forms for notification of addition, change
+or removal of several item at once. See
+\helpref{ItemsAdded}{wxdataviewmodelitemsadded},
+\helpref{ItemsDeleted}{wxdataviewmodelitemsdeleted},
+\helpref{ItemsChanged}{wxdataviewmodelitemschanged}.
+
+Note that wxDataViewModel does not define the position or
+index of any item in the control because different controls
+might display the same data differently. wxDataViewModel does
+provide a \helpref{Compare}{wxdataviewmodelcompare} method
+which the wxDataViewCtrl may use to sort the data either
+in conjunction with a column header or without (see
+\helpref{HasDefaultCompare}{wxdataviewmodelhasdefaultcompare}).
+
+This class maintains a list of
+\helpref{wxDataViewModelNotifier}{wxdataviewmodelnotifier}
+which link this class to the specific implementations on the
+supported platforms so that e.g. calling
+\helpref{ValueChanged}{wxdataviewmodelvaluechanged}
+on this model will just call
+\helpref{wxDataViewModelNotifier::ValueChanged}{wxdataviewmodelnotifiervaluechanged}
+for each notifier that has been added. You can also add
+your own notifier in order to get informed about any changes
+to the data in the list model.
+
+Currently wxWidgets provides the following models apart
+from the base model:
+\helpref{wxDataViewIndexListModel}{wxdataviewindexlistmodel},
+\helpref{wxDataViewTreeStore}{wxdataviewtreestore}.
+
+Note that wxDataViewModel is reference counted, derives from
+\helpref{wxObjectRefData}{wxobjectrefdata} and cannot be deleted
+directly as it can be shared by several wxDataViewCtrls. This
+implies that you need to decrease the reference count after
+associating the model with a control like this:
+
+{\small%
+\begin{verbatim}
+ wxDataViewCtrl *musicCtrl = new wxDataViewCtrl( this, ID_MUSIC_CTRL );
+ wxDataViewModel *musicModel = new MyMusicModel;
+ m_musicCtrl->AssociateModel( musicModel );
+ musicModel->DecRef(); // avoid memory leak !!
+ // add columns now
+\end{verbatim}
+}%