'Virtual ListCtrl' 应该如何访问 'Model Data' 来填充它的列表?

How should a 'Virtual ListCtrl' access the 'Model Data' to populate it's list?

我有一个名为 MVC 的 class,它提供分离并充当 wxFrame/UI 和模型数据之间的代理。

class diagram

为简单起见,将MVC作为wxFrame的成员变量。

class MAIN_FRAME: public wxFrame
{       

public:    
    MAIN_FRAME();

public:
    MVC MODEL;   
};

wxFrame 实现了一个 'virtual wxListCtrl' 来从 MVC 请求列表数据。

但是,我不清楚 'virtual ListCtrl' 访问 MVC 的最佳方式,特别是在请求列表数据的重载函数中。问题在于 MyVirtualListCtrl 与 wxFrame 是分开的,因此没有访问 wxFrame 成员变量 MVC 的范围:

wxString MyVirtualListCtrl::OnGetItemText( long item_, long col_  ) const
{

   // If no data then populate list cells with "Empty". 
   if( this->MVC.empty() )
   {
       return _( "Empty" ) ;
   }

   // Use item and column to return the correct data for that particular cell.

   // mock solution
   >>wxString s = MVC.get_data( item_, col_ );<<
   >>return s;<<

}

在构造你的 MyVirtualListCtrl class 时,你可以给它一个 MAIN_FRAME 的引用,或者,可以说,直接给它 MODEL 的引用,然后直接使用它.正如您可以安全地假设 MAIN_FRAME(及其模型)将比 MyVirtualListCtrl 长寿,因为当框架本身被销毁时框架子级被销毁,从对象生命周期的角度来看这是安全的。