2011-03-22 22 views
5

No lo creí cuando leí la queja del usuario ... escribiendo .123 en un cuadro de texto WPF limitado muestra .321! Está arreglado por ahora, pero me pregunto si esto puede clasificarse como un error de WPF.¿Números que se muestran al revés?

El problema se produce cuando el cuadro de texto está vinculado a un campo doble de Entity Framework con el modo de enlace UpdateSourceTrigger establecido en PropertyChanged. Con cada número tecleado después del decimal, el cursor retrocede justo después del punto decimal causando el número hacia atrás. Cuando devuelvo UpdateSourceTrigger a su predeterminado de LostFocus, el problema (comprensiblemente) desaparece.

Entonces, ¿esto es un error? ¿Hay alguna solución que permita actualizar UpdateSourceTrigger PropertyChanged cuando está vinculado a un campo doble?

+0

¿Está utilizando un cuadro de texto WPF estándar? – Bas

+0

@Bas: este comportamiento ocurre con un cuadro de texto estándar, pero solo ocurre si cambia el modo de enlace predeterminado. –

Respuesta

3

Hay un motivo por el que TextBox está configurado en LostFocus y no en PropertyChanged. Cuando vincula esto a un doble EF, la validación puede causar un reinicio del valor, que a su vez puede restablecer la posición del cursor.

Hacer que un TextBox se comporte correctamente con UpdateSourceTrigger.PropertyChanged requiere una gran cantidad de lógica personalizada, ya que necesita rastrear las posiciones del cursor en eventos previos a la actualización de encuadernación, y restaurar después.

Dudo que esto se considere un error, ya que WPF establece TextBox en UpdateSourceTrigger.LostFocus. Si el valor predeterminado fuera diferente, estaría de acuerdo en que esto sería un error, pero dada la configuración predeterminada, dudo que el equipo lo trate como uno solo.

0

Lo siento por venir a la fiesta tan tarde, pero que también tenía el mismo problema y sólo en caso de cualquier otra persona que pasa a ver este post, tuvimos una solución diferente ... Se utilizó un StringFormat para el cuadro de texto:

Text="{Binding Path=YourDecimalOrDouble, StringFormat=\{0:#.#####\}, UpdateSourceTrigger=PropertyChanged} 

Lo anterior debería resolver el problema que está teniendo ... al menos lo hizo por nosotros.

De todos modos, ¡espero que ayude!

Cuestiones relacionadas