首页 > 解决方案 > 'Virtual ListCtrl' 应该如何访问'Model Data' 来填充它的列表?

问题描述

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

类图

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

class MAIN_FRAME: public wxFrame
{       

public:    
    MAIN_FRAME();

public:
    MVC MODEL;   
};

wxFrame 实现了一个“虚拟 wxListCtrl”来从 MVC 请求列表数据。

但是,我不清楚“虚拟 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;<<

}

标签: wxwidgetsvirtual-functions

解决方案


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


推荐阅读