Considere el siguiente modelo de vista de la propiedad:con retraso unión de la fuente
private string _slowProperty;
public string SlowProperty
{
get { return _slowProperty; }
set
{
_slowProperty = value;
RaisePropertyChanged("SlowProperty");
}
}
que está unido a una caja de texto, así:
<TextBox Text="{Binding SlowProperty}" />
Ahora, el problema aquí es que cada vez que el valor de SlowProperty cambia, y lo hace con bastante frecuencia, el cuadro de texto iría e intentaría obtener su valor, que es bastante lento. Podría aliviar la situación utilizando el enlace asíncrono, sin embargo, eso seguiría desperdiciando ciclos de CPU.
En su lugar, lo que me gustaría tener es algo así como:
<TextBlock Text="{z:DelayedSourceBinding SlowProperty}" />
cual sería tratar de conseguir la unión después de un cierto retraso. Entonces, por ejemplo, si el SlowProperty
cambió 5 veces seguidas, dentro de un tiempo corto, entonces solo el último texto sería visible en el cuadro de texto.
he encontrado el following project que realiza algo por el estilo, por lo que mi ejemplo que podía usar de esta manera:
<TextBox Text="{z:DelayBinding Path=SearchText}" />
El problema con él, es que sólo se actualiza el objetivo vinculante después un retraso. La ruta de origen, sin embargo, se evalúa y su getter se ejecuta con cada cambio de la fuente. Lo cual, en el caso de SlowProperty
, seguiría desperdiciando ciclos de CPU.
He intentado hacer mi propia clase de encuadernación diferida, pero got stuck. ¿Hay alguna otra carpeta que pueda hacer algo como eso?
Para completarlo, aquí hay otros 2 proyectos que realizan tareas similares, sin embargo, ninguno de abordar el problema que estoy experimentando:
DeferredBinding - Una solución similar a DelayBinding. Sin embargo, es un poco más complejo de usar.
DelayedBindingTextBox - Implementa el enlace retrasado utilizando un control de cuadro de texto personalizado.
Gracias!
Colin, excelente. Todos los problemas de CS se pueden resolver agregando otra capa de indirección. :) –
Probablemente tengas razón, este es, de hecho, un problema que debería resolverse en el nivel VM. Sin embargo, aún me gustaría saber si es posible hacer un enlace personalizado, como el que describí. – VitalyB