Domanda

Mi arrendo, come faccio io scaccio questo?

class AmountIsTooHighConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        //int amount = (int)value;
        //int amount = (int)(string)value;
        //int amount = (int)(value.ToString);
        //int amount = Int32.Parse(value);
        //int amount = (int)Convert.ChangeType(value, typeof(int));
        //int amount = Convert.ToInt32(value);
        if (amount >= 35)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return null;
    }
}
È stato utile?

Soluzione

Sia Convert.ToInt32 o Int32.Parse dovrebbero lavorare ... Se così non fosse, allora il valore non è sicuramente un int;)
Provate a mettere un punto di interruzione nel vostro convertitore per guardare il valore, potrebbe mostrare il motivo per cui non funziona

Altri suggerimenti

Se il valore è in realtà un oggetto stringa (con un contenuto che rappresenta un valore intero), questo dà il minimo sovraccarico:

int amount = Int32.Parse((string)value);

Il Convert.ToInt32 dovrebbe essere in grado di gestire più tutto ciò che è possibile convertire in int, come una stringa contenente cifre o qualsiasi tipo numerico che rientra nell'intervallo che un int può gestire.

Mettere un punto di interruzione la parentesi del metodo Convert apertura. Avviare l'applicazione in modalità di debug. Quando il punto di interruzione viene colpito analizzare il tipo effettivo di valore . Fare il cast. Se il valore è di stringa cast a corda e poi analizzare il risultato di ottenere un numero intero. Eseguire nuovamente il programma. Dovrebbe funzionare questa volta.

Se il valore è un oggetto, ToString() è meglio convertire in stringa prima analisi a Int int amount = Int32.Parse(value.ToString());

La risposta è fondamentalmente semplice. Poiché il IValueConverter stesso ha un metodo chiamato Convert non si può semplicemente ci dell'oggetto Convert proprio così.

Ma se si aggiunge il prefisso corretto funziona:

int amount = System.Convert.ToInt32(value);
int amount;
if(int32.TryParse((string)value,out amount)
{
   if(amount>=35)
    {
        return true;
    }
    else
    {
      return false;
    }
}
else
{
  return false;
}

Questo è modo più sicuro, penso!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top