Hace algún tiempo escribí una pequeña aplicación tipo widget que se suponía debía hacer un seguimiento de las tareas, cada tarea tenía una fecha límite especificada como DateTime
, ahora si desea mostrar cuánto tiempo queda hasta la fecha límite es posible que desee unirse a una "virtual" (* maldice la palabra clave virtual
*) propiedad como esta:Encuadernación a propiedades dependientes del tiempo
public TimeSpan TimeLeft
{
get { return Deadline - DateTime.Now; }
}
Obviamente, en teoría, esta propiedad cambia cada garrapata y que desee actualizar su interfaz de usuario de cada de vez en cuando (p. ej., extrayendo periódicamente un evento PropertyChanged
para esa propiedad).
Cuando escribí el widget, actualicé la lista de tareas completa cada minuto, pero esto no es ideal ya que si el usuario interactúa con algún elemento (por ejemplo, escribiendo en un TextBox que se une a un Comments
-property) que será ásperamente interrumpido y las actualizaciones de la fuente se pierden.
Entonces, ¿cuál podría ser el mejor enfoque para la actualización de la interfaz de usuario si tiene propiedades dependientes del tiempo como este?
(No consumo que la aplicación más por cierto, sólo pensé que esto era una pregunta muy interesante)
Usted sabe más acerca de estas cosas que yo, así que estoy curioso - fuera del DP del INPC y de qué eventos o acciones hacen que el sistema de unión a volver a evaluar todas las vinculaciones disponible en la interfaz de usuario? ¿Hay alguno? Si es así, ¿se puede confiar en que alguno de ellos se produzca de manera confiable? – Tim
@Tim: No se puede pensar en ninguno, bueno, cuando se modificó el DataContext que causa actualizaciones (para los enlaces que se unen a él) en el subárbol debido a la herencia. En WPF tiene acceso público a la (http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.datacontextchanged.aspx) evento asociado [DataContextChanged' ']. En Silverlight es interno por alguna razón. –
Podría valer la pena establecer como requisito de diseño de WPF que todas las propiedades tengan definidores y que el captador siempre devuelva el valor establecido. De lo contrario, decir funciones como la anterior representa que la GUI es esencialmente una mentira. –