private SAThreadViewEventArgs CreateViewmodel(Uri parameter) { // try and parse a thread page from the html ThreadPageMetadata page = MetadataExtensions.ThreadPageFromUri(parameter); // since we have a page, create thread metadata from it ThreadMetadata thread = new ThreadMetadata() { ThreadID = page.ThreadID, Title = page.ThreadTitle, PageCount = page.LastPage }; // create binding wrappers Data.ThreadDataSource threadSource = new Data.ThreadDataSource(thread); Data.ThreadPageDataObject pageSource = new Data.ThreadPageDataObject(page); // create viewmodel ViewModels.ThreadViewModel viewmodel = new ViewModels.ThreadViewModel(); int pageIndex = pageSource.PageNumber - 1; viewmodel.UpdateModel(threadSource); viewmodel.Pages[pageIndex] = pageSource; // set the current page to page source viewmodel.SelectedItem = viewmodel.Pages[pageIndex]; viewmodel.SelectedIndex = pageIndex; return(new SAThreadViewEventArgs(viewmodel)); }
protected override object DoWork(int parameter) { ThreadViewPageState state = null; ThreadPageMetadata page = LoadPageFromWeb(parameter); if (page == null) { throw new NullReferenceException("Thread page must not be null."); } else { var pageData = new Data.ThreadPageDataObject(page); // mine data about the thread from the page Thread.Title = page.ThreadTitle; if (page.LastPage > 0) { Thread.PageCount = page.LastPage; } // set the selected index to that of the loaded page SelectedIndex = page.PageNumber - 1; // create page state and save immeadiately so we don't have to load this again state = new ThreadViewPageState(Thread, pageData); try { ThreadViewPageState.Save(state); } catch (Exception) { } // setup page proxy and insert page at proper index SetPages(Thread.PageCount); Pages[SelectedIndex] = pageData; } return(state); }