J'essaie de convertir une valeur en utilisant deux valeurs seuils, l'appel à la base de données renvoie trois variables
Double Score;
Double LowerThreshold;
Double HigherThreshold;
Si le score est inférieur au seuil inférieur, une image rouge s'affiche, s'il se situe entre les deux seuils, une image orange s'affiche et s'il est supérieur au seuil supérieur, une image verte s'affiche.
Actuellement, j'utilise un ValueConverter personnalisé, mais je ne suis pas sûr que ce soit la meilleure façon de procéder. Je fusionne les seuils haut et bas ensemble pour qu'ils ressemblent à ceci "30,50" et ensuite j'analyse les valeurs de la chaîne et je détermine quelle image afficher.
Voici le code que j'utilise pour le ValueConverter
public class ScoreConverter : IValueConverter
{
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is double)
{
if (parameter is string)
{
if ((parameter as string).Contains(","))
{
string[] thresholds = (parameter as string).Split(',');
int lowerThreshold;
int upperThreshold;
bool success;
success = int.TryParse(thresholds[0], out lowerThreshold);
if (!success)
return "Error";
success = int.TryParse(thresholds[1], out upperThreshold);
if (!success)
return "Error";
if ((double)value < lowerThreshold)
{
//red
return "/Red32.png";
}
else if ((double)value > upperThreshold)
{
//green
return "/Green32.png";
}
else
{
//amber
return "/Amber32.png";
}
}
}
}
return "Error";
}
public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return "Not Possible";
}
}
Toute suggestion pour une meilleure approche serait appréciée,
Gracias
EDIT
Décidé d'utiliser le code suivant, le serveur renvoie la structure suivante
public class ScoreInformation
{
public double Score { get; set; }
public double lowerThreshold { get; set; }
public double upperThreshold { get; set; }
}
Et voici le code qui le convertit et affiche l'image correcte
public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is ScoreInformation)
{
ScoreInformation si = (ScoreInformation)value;
if (si.Score < si.lowerThreshold)
{
return "Red32.png";
}
else if (si.Score > si.upperThreshold)
{
//green
return "Green32.png";
}
else
{
//amber
return "Orange32.png";
}
}
return "Grey32.png";
}