IMultiValueConverter + MultiBinding - Cálculos Arithmatic inversa sobre los valores enlazados a datos?

StackOverflow https://stackoverflow.com/questions/4666137

Pregunta

Apollogies para el título raro. Yo no sabía de qué otra manera de decirlo.

Lo que tengo es de 3 cuadros de texto enlazados a datos a algunos valores.

Lo que usted debe hacer es tener el valor de 1 de los cuadros de texto calcular automáticamente como resultado de un cálculo de los otros 2 cuadros de texto.

Después de algún Google'ing, he encontrado que el uso de la interfaz de IMultiValueConverter debe resolver mi problema. Lo hace. Pero sólo 1 manera.

Por ejemplo:

TextBox 1 * TextBox 2 = TextBox 3

Pero lo contrario también es cierto:

TextBox 3 / TextBox 2 = TextBox 1

Esto último es lo que estoy teniendo problemas para completar. No importa lo que haga, el palo de cálculo suele inversa.

He implementado 2 IMultiValueConverters, cada uno de los 2 cuadros de texto (desde sus diferentes cálculos 2).

Convertidor 1:

Public Class SalaryConverter
Implements IMultiValueConverter

Public Function Convert(ByVal values() As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IMultiValueConverter.Convert
    Dim salary As Double = 0
    salary = (Math.Round(values(0) * (values(1) * 4)))
    Return salary.ToString("C")
End Function

Public Function ConvertBack(ByVal value As Object, ByVal targetTypes() As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object() Implements System.Windows.Data.IMultiValueConverter.ConvertBack
    Return Nothing
End Function

End Class

Convertidor 2:

Public Class RateConverter
Implements IMultiValueConverter

Public Function Convert(ByVal values() As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IMultiValueConverter.Convert
    Dim rate As Double = 0
    rate = ((values(0) / values(1)) / 4)
    Return rate.ToString("C")
End Function

Public Function ConvertBack(ByVal value As Object, ByVal targetTypes() As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object() Implements System.Windows.Data.IMultiValueConverter.ConvertBack
    Return Nothing
End Function

End Class

Se verá que los valores de retorno de los métodos ConvertBack se establece en Nothing. Esto se debe a que cuando vuelva el parámetro de valor, me sale una excepción diciendo que no puedo convertir de cadena a la matriz 1-dimensional.

¿Qué estoy haciendo mal?

Cualquier ayuda es muy apreciada.

Gracias de antemano.

P.S. Soy bastante nuevo en convertidores. Sólo empecé a jugar un rato con él recientemente.

¿Fue útil?

Solución

Un valor convertir múltiples trabaja como esto:

  1. el método Convert requiere n parámetros de entrada y convertirla en 1 resultado. En su caso: TextBox 1 + TextBox 2 => TextBox 3
  2. el ConvertBack es la inversa: toma 1 parámetro de entrada y convertirla en n resultados. En su caso: TextBox 3 => TextBox 1 + TextBox 2

Así que su ConvertBack debe devolver una matriz que contiene los valores de TextBox1 y TextBox2 ... Si sólo desea actualizar TextBox1 para exemple, que puede hacer:

return new object[] { myTextBox1String, Binding.DoNothing };

EDIT: enlace a MSDN ConvertBack: http : //msdn.microsoft.com/en-us/library/system.windows.data.imultivalueconverter.convertback.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top