private void PreviewGrid_GridTapped(object sender, GridTappedEventArgs e)
        {
            try
            {
                var rowIndex    = e.RowColumnIndex.RowIndex;
                var rowData     = e.RowData;
                var columnIndex = e.RowColumnIndex.ColumnIndex;

                VmPreviewEqVar vmPreviewEqVar = rowData as VmPreviewEqVar;

                if (columnIndex == 1)
                {
                    if (vmPreviewEqVar == null || vmPreviewEqVar.IsCalculated)
                    {
                        return;
                    }

                    //previewGrid.EndEdit();     // Finish previous edit if there was one.
                    //previewGrid.BeginEdit(rowIndex, columnIndex);      // Start new one.
                }
            }
            catch (Exception ex)
            {
                Logging.LogException(ex);
            }
        }
        private void SetEqPreviewVariables()
        {
            try
            {
                IList<SingleValue> eqVars = _currentEquationCalc?.FindAllVariables() ?? (new List<SingleValue>());
                IList<SingleValue> eqConstants = _currentEquationCalc?.FindAllConstants() ?? (new List<SingleValue>());

                // -------------
                SetMaxVarLength(eqVars, eqConstants);

                // -------------
                EqPreviewVariables.Clear();

                // -------------
                Random rnd = new Random();
                const int rndMax = 1000000;
                const double rndDivide = (double)(rndMax / 10);

                // -------------
                for (int i = 0; i < eqVars.Count; i++)
                {
                    var item = eqVars[i];
                    item.ClearAllVarVals();

                    bool isCalculated = false;
                    if (i == 0) { isCalculated = true; }

                    VmPreviewEqVar eqVar = new VmPreviewEqVar(this, item, isCalculated);
                    EqPreviewVariables.Add(eqVar);

                    AssignTestData(eqVar, isCalculated, item, rnd, rndMax, rndDivide);
                }

                for (int i = 0; i < eqConstants.Count; i++)
                {
                    var item = eqConstants[i];
                    EqPreviewVariables.Add(new VmPreviewEqVar(this, item, true));
                }
            }
            catch (Exception ex)
            {
                Logging.LogException(ex);
                throw;
            }

        }
 private void AssignTestData(VmPreviewEqVar eqVar, bool isCalculated, SingleValue sngVal, Random rnd, int rndMax, double rndDivide)
 {
     if (!isCalculated && (sngVal is Variable))
     {
         if ((_currentEquationCalc.TestValues != null) && _currentEquationCalc.TestValues.ContainsKey(sngVal.Name))
         {
             eqVar.Value = _currentEquationCalc.TestValues[sngVal.Name];
         }
         else
         {
             // Assign randomn values for the test calculation
             int rndNext = rnd.Next(rndMax);
             double varVal = ((double)rndNext) / rndDivide;       // Going to be a Number between 0 and 10
             eqVar.Value = varVal;
         }
     }
     eqVar.SetExpectedDimensions((_currentEquationCalc.ExpectedDimensions.ContainsKey(sngVal.Name) ?
                                             _currentEquationCalc.ExpectedDimensions[sngVal.Name] : null));
 }
        void UpdateCalcInput(VmPreviewEqVar wmEqVar)
        {
            try
            {
                SingleValue singleValue = wmEqVar.GetSingleValue();
                KnownUOM knownUOM = wmEqVar.GetKnownUOM();

                if (singleValue == null) return;
                if (singleValue is Constant) return;
                if (singleValue is Literal) return;

                // Check or update the calc UOM
                bool bUpdateCalcUom = false;
                if (knownUOM == null)
                {
                    singleValue.CalcQuantity.AnonUOM = null;
                }
                else if (singleValue.CalcQuantity.AnonUOM == null)
                {
                    bUpdateCalcUom = true;
                }
                else if (!knownUOM.Dimensions.Equals(singleValue.CalcQuantity.AnonUOM.Dimensions))
                {
                    bUpdateCalcUom = true;
                }

                if (bUpdateCalcUom)
                {
                    singleValue.CalcQuantity.AnonUOM = new AnonUOM(knownUOM.Dimensions, _uOMSet);
                }

                double dbl = (wmEqVar.Value ?? double.NaN);

                CalcStatus calcStatus;
                if (double.IsNaN(dbl) || double.IsInfinity(dbl))
                {
                    calcStatus = CalcStatus.Bad;
                }
                else
                {
                    calcStatus = CalcStatus.Good;
                }

                singleValue.CalcQuantity.CalcStatus = calcStatus;

                // Convert the input value to the calc UOM
                double convertedVal = dbl;

                if (knownUOM != null)
                {
                    convertedVal = UOM.Convert(dbl, fromUOM: knownUOM, anonToUOM: singleValue.CalcQuantity.AnonUOM);
                }

                singleValue.CalcQuantity.Value = convertedVal;

                SetMaxUOMLength();
            }
            catch (Exception ex)
            {
                Logging.LogException(ex);
                throw;
            }
        }