Silverlight Преобразование значения с использованием порогов - PullRequest
2 голосов
/ 27 июня 2011

Я пытаюсь преобразовать значение, используя два пороговых значения, вызов базы данных вернет три переменные

Double Score;
Double LowerThreshold;
Double HigherThreshold;

Если оценка ниже нижнего порога, тогда будет показано красное изображение, если он находится между двумя порогами, тогда будет отображаться желтый, а если он выше, чем верхний порог, то будет показан зеленый.

В настоящее время я использую пользовательский ValueConverter, но я не уверен, что это лучшийспособ сделать это.Я объединяю верхний и нижний пороги вместе, чтобы они выглядели как «30,50», а затем анализирую значения из строки и определяю, какое изображение отображать.

Это код, который я использую для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";
    }
}

Буду признателен за любые предложения по лучшему подходу,

Спасибо

РЕДАКТИРОВАТЬ

Решено использоватьследующий код, сервер возвращает следующую структуру

public class ScoreInformation
{
    public double Score { get; set; }

    public double lowerThreshold { get; set; }

    public double upperThreshold { get; set; }

}

И это код, который преобразует его и отображает правильное изображение

    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";
    }

1 Ответ

2 голосов
/ 27 июня 2011

Это, безусловно, один из способов сделать это, особенно если диапазоны будут меняться каждый раз, когда вы используете привязку, однако, если вы собираетесь снова и снова использовать одни и те же значения, вы можете объявить свойства в вашем преобразователь значений и установите их при инициализации.

public int upperThreshold { get; set; }
public int lowerThreshold { get; set; }

public string lowImage { get; set; }
public string middleImage { get; set; }
public string highImage { get; set; }

public object Convert(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value is double)
        {

            if ((double)value < lowerThreshold)
            {
                //red
                return lowImage;
            }
            else if ((double)value > upperThreshold)
            {
                //green
                return highImage;
            }
            else
            {
                //amber
                return middleImage;
            }

        }
        return "Error";
    }

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return "Not Possible";
    }
}

<local:RangeToImageConverter
    x:Name="MyRangeConverter"
    upperThreshold="30"
    lowerThreshold="50"
    lowImage="/red32.png"
    middleImage="/amber32.png"
    highImage="/green32.png"
    />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...