private void RefreshSelectedTreeLevels()
        {
            try
            {
                int      lastGoodItem      = 0;
                TreeNode selectedChildNode = SelectedTreeLevels[0].SelectedChildNode;
                for (int i = 1; i < SelectedTreeLevels.Count; i++)
                {
                    if ((selectedChildNode == null) || (SelectedTreeLevels[i].TreeNode != selectedChildNode))
                    {
                        break;      // This selection, and all those below is no longer consistent with the selections above
                    }
                    lastGoodItem      = i;
                    selectedChildNode = SelectedTreeLevels[i].SelectedChildNode;
                }

                int j = SelectedTreeLevels.Count - 1;
                while (j > lastGoodItem)
                {
                    SelectedTreeLevels.RemoveAt(j);
                    j--;
                }

                // Add the selection point at the end
                SelectedTreeLevel lastSelectedTreeLevel = SelectedTreeLevels[SelectedTreeLevels.Count - 1];
                SelectedTreeLevels.Add(new SelectedTreeLevel(lastSelectedTreeLevel, lastSelectedTreeLevel.SelectedChildNode));
            }
            catch (Exception ex)
            {
                Logging.LogException(ex);
                throw;
            }
        }
            public SelectedTreeLevel(SelectedTreeLevel parent, TreeNode treeNode)
            {
                Parent   = parent;
                TreeNode = treeNode;

                //foreach (var item in treeNode.ChildTreeNodes)
                //{
                //    ChildNames.Add(item.Name);
                //    junkChildNames.Add(item.Name);
                //}
            }
 private void lstTreeLevels_ItemTap(object sender, ItemTappedEventArgs e)
 {
     try
     {
         SelectedTreeLevel selectedTreeLevel = e.Item as SelectedTreeLevel;
         SelectTreeLevel(selectedTreeLevel);
     }
     catch (Exception ex)
     {
         Logging.LogException(ex);
         throw;
     }
 }
        private void Item_Clicked(object sender, EventArgs e)
        {
            try
            {
                Button btn = sender as Button;

                SelectedTreeLevel selectedTreeLevel = btn?.BindingContext as SelectedTreeLevel;
                SelectTreeLevel(selectedTreeLevel);
            }
            catch (Exception ex)
            {
                Logging.LogException(ex);
                throw;
            }
        }
        private void SelectTreeLevel(SelectedTreeLevel selectedTreeLevel)
        {
            try
            {
                CurrentlySelectedTreeLevel = selectedTreeLevel;
                CurrentEquationCalc        = null;
                OnPropertyChanged("CurrentEquationCalc");

                if (CurrentlySelectedTreeLevel == null)
                {
                    throw new UnspecifiedException("CurrentlySelectedTreeLevel should not be null");
                }

                SelectedLevelChildNames.Clear();
                _selectedLevelChildren.Clear();
                _selectedLevelSelectedChild = null;

                foreach (var node in CurrentlySelectedTreeLevel?.TreeNode?.ChildTreeNodes)
                {
                    SelectedLevelChildNames.Add(node.Name);
                    _selectedLevelChildren.Add(node.Name, node);
                }

                //picker.IsOpen = true;
                lstTreeLevels.IsVisible   = false;
                equationDisplay.IsVisible = lstTreeLevels.IsVisible;

                if (SelectedLevelChildNames.Count == 0)
                {
                    lstLevels.IsVisible    = false;
                    lstEquations.IsVisible = true;
                }
                else
                {
                    lstLevels.IsVisible    = true;
                    lstEquations.IsVisible = false;
                }
            }
            catch (Exception ex)
            {
                Logging.LogException(ex);
                throw;
            }
        }