Mi configuración es como se describe a continuación:de datos no actualiza la propiedad al pulsar Intro en un cuadro de diálogo con un botón predeterminado
- WPF 4 aplicación marco
- MVVM Lite
- Un "Agregar elemento "ventana se muestra en la parte superior de la ventana principal en modo de diálogo (usando view.ShowDialog();)
- El cuadro de diálogo tiene una serie de campos de entrada y el botón" Guardar "que tiene la propiedad IsDefault establecida en True
- El botón "Guardar" está a mano conducido usando una unión a un comando
- de datos se define la unión entre los campos de entrada en XAML de vista y las propiedades correspondientes en el modelo de vista (de una manera, para la interfaz de usuario para actualizar el modelo de vista, con Mode = OneWayToSource)
El problema es que cuando presiono Enter en el teclado, el valor que proporcioné en el último campo de entrada no se envía a la propiedad subyacente de ViewModel.
Sospecho que esto tiene algo que ver con el hecho de que el campo de entrada no ha perdido el foco antes de que se cierre la ventana (y por lo tanto todas las vinculaciones se "disuelven"). Para comparar, si haga clic en el botón "Guardar" (en lugar de dejar que su Click sea manejado por la ventana en Entrar), el valor es actualizado en la propiedad. Además, si agrego (¡horror! Horror!) Un controlador de eventos al evento Click del botón, y llamo a button.Focus() en código subyacente, ¡todo funciona!
¿Cuál puede ser el remedio?
Yo, obviamente, no quiero manejar cualquier ventana de eventos de cierre, y "manual" Recuperar los valores que faltan ... esto violaría el concepto MVVM :-(
mejor sugerencia?
Gracias, Alex
Me he encontrado con este mismo comportamiento en varios otros idiomas, especialmente Delphi (supongo que Hejlsberg consideró que esta característica no era una falla, si también era responsable de WPF). La opción PropertyChanged tiene problemas si se vincula a un número, porque intentará validar "3". mientras escribes Pi y haces una excepción. No me importa el botón. Opción de enfoque() ya que funcionará con todos los controles y también a prueba futura del diálogo. –