Encontré un problema interesante que encontré primero en WinForms, y lo encontré de nuevo en Silverlight, y más que probable WPF también cuando se trata de enlace de datos.La vinculación de datos queda atrás notificación de evento - discusión
Tengo un control de pestañas con varias pestañas. A medida que los usuarios hacen clic en las pestañas, cada vez debe ser válido antes de permitir que el usuario cambie de la pestaña.
Por ejemplo, el usuario está en un cuadro de texto que se actualiza. La vinculación de cuadros de texto no se vacía hasta que el control pierde el foco. La pérdida de foco ocurre cuando el cursor se mueve desde el control, y el foco se le da a otro control.
En este caso, las pestañas del usuario en un control (usemos el cuadro de texto para este ejemplo) y actualiza el cuadro de texto. En este punto, el enlace de datos no ha descargado el control y, por lo tanto, la VM aún no ha visto el cambio. El usuario luego usa su mouse para hacer clic en la siguiente pestaña del control.
En este punto las cosas se ponen interesantes. Utilicé PreviewSelectionChanged (Telerik RadTabControl), ya que quiero verificar las cosas antes de que ocurra el salto a la siguiente pestaña, y también me da la posibilidad de cancelar el evento.
Sin embargo, cuando miro la VM, en este caso, todavía no tiene los datos actualizados. Veo que la VM está limpia, y sigo adelante y permitiré el salto a la siguiente pestaña.
Sin embargo, tan pronto como finaliza este evento, las conexiones de datos se vacían y la VM se actualiza. ¿ahora que? ¡Los eventos no están sincronizados! Cuando se usó el mouse para hacer clic en la siguiente pestaña, el cuadro de texto debería haber perdido el foco, se ha enjuagado sus enlaces, ¡antes de hacer clic en la Vista previa de la pestaña! Es tarde para dar un salto atrás y decir uy, ¡no logramos atraparlo a tiempo!
Creo que encontré un trabajo interesante sobre este tema, pero no estoy 100% seguro de que funcione el 100% del tiempo. Cancelé el evento actual, pero luego utilizo Dispatcher y creo un delegado que apunta a otro método con la misma firma que el evento actual. El despachador añadirá este mensaje al suministro de mensajes, que para entonces será ahora (con suerte?) Estar detrás de los mensajes de la actualización VM ...
Mis dos preguntas son: 1) I Supongo que el control del cuadro de texto no se sonrojó cuando el mouse dejó el control, o el proceso que se activó fue demasiado lento y, por lo tanto, el mensaje de vista previa estaba en la bomba antes del enlace de datos. De cualquier forma, veo que es problema.
2) es la solución una buena solución?
¡No es una opción en Silverlight! ¡Ojalá lo fuera, pero aún no se ha implementado! – codeputer
Puede escribir su propio comportamiento adjunto para lograr la misma funcionalidad. –
Estoy buscando entender cómo los eventos de perder enfoque desde el cuadro de texto, y el clic del control de tabulación son elevados/procesados en un orden de línea de tiempo equivocado - el foco perdido ocurre primero, pero el evento click se levanta antes del punto perdido. – codeputer