C # / WPF - cuadrícula de datos - Actualización de color para después del tiempo de espera

StackOverflow https://stackoverflow.com/questions/4474200

Pregunta

Actualmente utilizar el siguiente método para establecer el color de fondo de mi fila.

XAML

        <Style TargetType="{x:Type xcdg:DataRow}">
            <Setter Property="Background">
                <Setter.Value>
                    <MultiBinding Converter="{StaticResource colorConverter}">
                        <Binding RelativeSource="{RelativeSource Self}" Path="IsSelected"/>
                        <Binding BindsDirectlyToSource="True" />
                    </MultiBinding>
                </Setter.Value>
            </Setter>
        </Style>

C #

public class ColourConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        var isRowSelected = (bool)values[0];
        var myInstance = (MyClass) values[1];

        // Return default
        if (isRowSelected || myInstance == null)
            return DependencyProperty.UnsetValue;

        // Get the check for the current field
        return GetColour(myInstance) ?? DependencyProperty.UnsetValue;
    }

    private static SolidColorBrush GetColour(MyClass myInstance)
    {
        if (heartbeat == null)
        {
            return null;
        }

        // Is it more two minutes old?
        return (myInstance.CreatedDateTime + TimeSpan.FromMinutes(2) < Clock.UtcNow())
                   ? Brushes.LightPink
                   : Brushes.LightGreen;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException(this.GetType().Name + " cannot convert back");
    }
}

El problema es que este convertidor sólo se le llama en la población de DataRow con nuevos valores. Lo que realmente necesito es algún tipo de devolución de llamada para cambiar el color después de un cierto tiempo o para tener el convertidor reevaluado periódicamente.

La actualización de color no tiene por qué ser instantánea, solo en unos pocos segundos. Si tengo una llamada de retorno para cada fila luego me necesitará tantos hilos para que coincida con (Ellos son creados y por lo tanto se vencen (que cambia su color) en diferentes momentos), con ~ 1000 filas este no parece ser una opción eficiente.

La otra opción es para sondear las filas en un único hilo periódicamente y reevaluar el convertidor en cada iteración (cada 5 segundos?). Creo que este es probablemente el camino a seguir, pero no sé cómo hacer para que en WPF.

Tal vez hay otro enfoque o soporte incorporado para una tarea tan?

Gracias de antemano!

¿Fue útil?

Solución

Debería ser posible obtener el BindingExpression del DataRow y simplemente llamar UpdateSource / UpdateTarget manualmente tantas veces como sea necesario ...

BindingExpression binding = Control.GetBindingExpression(DataRow.BackgroundProperty)
binding.UpdateSource;

No se olvide de cambiar también el propiedad UpdateSourceTrigger en la unión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top