/// <summary>
        /// Gets the state of a TabablzControl so that it can be serialized.
        /// </summary>
        /// <typeparam name="TTabModel">The type of tab model</typeparam>
        /// <typeparam name="TTabViewModel">The type of tab view model, currently displayed in the app.</typeparam>
        /// <param name="tabablzControl">The control to be </param>
        /// <param name="tabContentModelConverter">The converter that transforms tab view models to models</param>
        /// <returns>The state of the tab set</returns>
        public static TabSetState <TTabModel> GetTabSetState <TTabModel, TTabViewModel> (TabablzControl tabablzControl, Func <TTabViewModel, TTabModel> tabContentModelConverter)
        {
            var tabItems      = tabablzControl.GetOrderedItems( ).Cast <TTabViewModel> ( ).Select(tabContentModelConverter).ToArray( );
            var selectedIndex = (int?)tabablzControl.SelectedIndex;

            if (selectedIndex == -1)
            {
                selectedIndex = null;
            }

            return(new TabSetState <TTabModel> (tabItems, selectedIndex));
        }