Pergunta

Eu desisto, como faço para lançar isso?

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;
    }
}
Foi útil?

Solução

Ambos Convert.ToInt32 ou Int32.Parse deve funcionar ... Se não o fizerem, então o valor não é definitivamente um int;)
Tente colocar um ponto de interrupção no seu conversor de ver o valor, ele pode mostrar-lhe porque ele não funciona

Outras dicas

Se o valor é realmente um objeto string (com um conteúdo que representa um valor inteiro), o que dá a menor sobrecarga:

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

O Convert.ToInt32 deve ser capaz de lidar com a maioria tudo o que é possível converter para um int, como uma string contendo dígitos ou qualquer tipo numérico que está dentro da faixa que um int pode manipular.

Coloque um ponto de interrupção no parêntese de seu método Converter abertura. Inicie a aplicação no modo de depuração. Quando o ponto de interrupção é atingido analisar o tipo real de valor . Faça o elenco. Se o valor for string de lançá-lo para string e, em seguida, analisar o resultado para obter um inteiro. Execute o programa novamente. Ele deve funcionar desta vez.

Se o valor for um objeto, ToString() é melhor para converter a cadeia antes de analisar a Int int amount = Int32.Parse(value.ToString());

A resposta é basicamente simples. Porque o IValueConverter tem em si um método chamado Convert você não pode simplesmente nos o objeto Convert apenas como aquele.

Mas se você adicionar o prefixo correto funciona:

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;
}

Esta é a maneira mais segura, eu acho!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top