public async override void ViewDidLoad()
        {
            try {
                if (!_initial)
                {
                    this.InitLeftButton();
                }

                LongRunning = true;
                base.ViewDidLoad();

                var sites = await ServiceProxy.GetAllSites();

                foreach (var site in sites.items)
                {
                    var captured = site;

                    AddRow(new SubtitleDynamicRow {
                        Text        = site.NameDecoded,
                        Details     = site.AudienceDecoded,
                        ImageGetter = () => placeholder,
                        Action      = delegate {
                            Config.CurrentSite = captured;
                            ServiceProxy.InitSite(captured.api_site_parameter);

                            if (_initial)
                            {
                                Nav.BuildDeck();
                            }
                            else
                            {
                                Nav.LeftMenu.ReloadAllData();
                                Nav.CloseLeftAndOpen(new QuestionsLatestController());
                            }
                        },
                        AfterGetCellInit = cell => {
                            cell._image.SetImage(new NSUrl(captured.icon_url), placeholder,
                                                 delegate(UIImage image, NSError error, SDImageCacheType cacheType)
                            {
                                cell._image.Image = image;
                            });
                        }
                    });
                }

                ForceReloadData();

                _tableView.ScrollToRow(NSIndexPath.FromRowSection(0, 0), UITableViewScrollPosition.Top, false);
            }
            catch (Exception ex) {
                this.UnhandledError(ex);
            }
        }
        public void ReloadAllData()
        {
            try {
                ClearAllRows();

                var    site        = Config.CurrentSite;
                var    me          = Config.CurrentUser;
                string accessToken = Config.AccessToken;

                if (me != null)
                {
                    AddRow(new UserListRow(me)
                    {
                        Action = delegate { Nav.CloseLeftAndOpen(new UserProfileController(me)); }
                    });
                }

                AddRow(new SubtitleFixedRow
                {
                    Text    = "You are in " + site.NameDecoded,
                    Details = "tap to change",
                    Action  = delegate { Nav.CloseLeftAndOpen(new SiteChooserController(initial: false)); }
                });

                AddRow(new DefaultFixedRow
                {
                    Text   = "Browse Questions",
                    Action = delegate { Nav.CloseLeftAndOpen(new QuestionsLatestController()); }
                });

                AddRow(new DefaultFixedRow
                {
                    Text   = "Browse Tags",
                    Action = delegate { Nav.CloseLeftAndOpen(new TagsController()); }
                });

                AddRow(new DefaultFixedRow
                {
                    Text   = "Browse Users",
                    Action = delegate { Nav.CloseLeftAndOpen(new UsersController()); }
                });

                if (accessToken.IsNotNullOrEmpty())
                {
                    AddRow(new DefaultFixedRow {
                        Text   = "Favorites",
                        Action = delegate { Nav.CloseLeftAndOpen(new FavoritesByUserController(me.user_id, false)); }
                    });

                    AddRow(new DefaultFixedRow {
                        Text   = "Notifications",
                        Action = delegate { Nav.CloseLeftAndOpen(new NotificationsController()); }
                    });

                    AddRow(new DefaultFixedRow {
                        Text   = "Inbox",
                        Action = delegate { Nav.CloseLeftAndOpen(new InboxController()); }
                    });
                }

                AddRow(new DefaultFixedRow {
                    Text   = "Site Info",
                    Action = delegate { Nav.CloseLeftAndOpen(new SiteInfoController(site.api_site_parameter)); }
                });

                AddRow(new DefaultFixedRow {
                    Text   = "History",
                    Action = delegate { Nav.CloseLeftAndOpen(new QuestionsHistoryController()); }
                });

                AddRow(new DefaultFixedRow {
                    Text   = "About Stacklash",
                    Action = delegate { Nav.CloseLeftAndOpen(new AboutController()); }
                });

                AddHeaderRow(" ");

                if (accessToken.IsNotNullOrEmpty())
                {
                    AddRow(new DefaultFixedRow
                    {
                        Text   = "Logout",
                        Action = delegate {
                            foreach (NSHttpCookie cookie in NSHttpCookieStorage.SharedStorage.Cookies)
                            {
                                NSHttpCookieStorage.SharedStorage.DeleteCookie(cookie);
                            }

                            NSUrlCache.SharedCache.RemoveAllCachedResponses();

                            Config.AccessToken = null;
                            Config.CurrentUser = null;
                            Nav.BuildDeck();
                        }
                    });
                }
                else
                {
                    AddRow(new DefaultFixedRow
                    {
                        Text   = "Login",
                        Action = delegate { Nav.CloseLeftAndOpen(new LoginController()); }
                    });
                }

                ForceReloadData();
            }
            catch (Exception ex) {
                this.UnhandledError(ex);
            }
        }