public PanelView(IPanelPresenter presenter, IAddonManager addonManager, IPanelItemFactoryManager factoryManager) { InitializeComponent(); // init presenters m_Presenter = presenter; m_Presenter.View = this; m_AddonManager = addonManager; m_FactoryManager = factoryManager; // setup items cache var cache = new ListViewItemCache(this); //LV.CacheVirtualItems += m_Cache.CacheVirtualItems; LV.RetrieveVirtualItem += cache.RetrieveVirtualItem; // set dropdown direction for sub-menus (actual for dual-monitor system) //mComp.DropDownDirection = ToolStripDropDownDirection.AboveLeft; //mSendToNewTab.DropDownDirection = ToolStripDropDownDirection.AboveLeft; // focus listview when panel got focus GotFocus += (sender, args) => ActiveControl = LV; // set filter's presenter pFilter.Presenter = App.Resolve <IFilterPresenter>(); pFilter.Presenter.View = pFilter; }
private void CreateCache(int startIndex, int endIndex) { var tabInfo = this._statuses.Tabs[this._curTab.Text]; if (tabInfo.AllCount == 0) return; // キャッシュ要求(要求範囲±30を作成) startIndex = Math.Max(startIndex - 30, 0); endIndex = Math.Min(endIndex + 30, tabInfo.AllCount - 1); var cacheLength = endIndex - startIndex + 1; var posts = tabInfo[startIndex, endIndex]; //配列で取得 var listItems = Enumerable.Range(0, cacheLength) .Select(x => this.CreateItem(this._curTab, posts[x], startIndex + x)) .ToArray(); var listCache = new ListViewItemCache { TargetList = this._curList, StartIndex = startIndex, EndIndex = endIndex, Post = posts, ListItem = listItems, }; Interlocked.Exchange(ref this._listItemCache, listCache); }