void _tabProvider_TabUpdated(object sender, TabUpdateEventArgs e)
        {
            //TODO: Consider a 'StartTabUpdates' and 'EndTabUpdates' method - *this* event handler would
            //not request layout or invalidate after StartTabUpdates and before EndTabUpdates, instead keeping count
            //of each of the tabs that raise the event.
            //When EndTabUpdates is called, if one ore tabs fired that event, then a re-layout and redraw will be
            //requested.

            //don't request layout and redraw if NotifyDataSetChanged is currently being called.
            //This is because in that method we call the tab provider's UpdateTab method, which *should*
            //raise this method if the implementation has been done properly.
            if (_inNotifyDataSetChanged)
            {
                return;
            }
            RequestLayout();
            Invalidate();
        }
		void _tabProvider_TabUpdateRequired(object sender, TabUpdateEventArgs e)
		{
			UpdateTab(e.Position, e.Hint);
		}
		void _tabProvider_TabUpdated(object sender, TabUpdateEventArgs e)
		{
			//TODO: Consider a 'StartTabUpdates' and 'EndTabUpdates' method - *this* event handler would
			//not request layout or invalidate after StartTabUpdates and before EndTabUpdates, instead keeping count
			//of each of the tabs that raise the event.  
			//When EndTabUpdates is called, if one ore tabs fired that event, then a re-layout and redraw will be
			//requested.

			//don't request layout and redraw if NotifyDataSetChanged is currently being called.
			//This is because in that method we call the tab provider's UpdateTab method, which *should*
			//raise this method if the implementation has been done properly.
			if (_inNotifyDataSetChanged)
			{
				return;
			}
			RequestLayout();
			Invalidate();
		}
 void _tabProvider_TabUpdateRequired(object sender, TabUpdateEventArgs e)
 {
     UpdateTab(e.Position, e.Hint);
 }