Изменение привязки цвета переднего плана ячеек в зависимости от состояния WPF - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь изменить цвет ячейки по умолчанию на красный в зависимости от того, превышает ли значение установленное ограничение. В настоящее время происходит то, что у меня есть сетка со списком масел с флажком. Когда установлен флажок для какого-либо конкретного масла, это масло добавляется в другую сетку, где я могу манипулировать его количеством. Например, если я проверяю 1 масло, его «UsagePercentage» становится равным 100. Если я проверяю другое, проценты обновляются до 50/50. Оттуда, если я нажму кнопку, чтобы увеличить ее значение на 1, она изменится на 66,6 / 33,3 и т. Д.

То, что я пытаюсь реализовать на основе моего кода, заключается в том, что если UsagePercentage масла больше, чем UsageLimit, измените текст переднего плана на красный, в противном случае оставьте его LightGray. Но когда я запускаю программу, текст UsagePercentage становится черным. Я не понимаю, почему связывание UsagePercentage работает, а ForegroundColor - нет.

Oil.cs

public float UsagePercentage
    {
        get { return mUsagePercentage; }
        set
        {
            mUsagePercentage = value;
            NotifyPropertyChanged("UsagePercentage");
        }
    }

OilList.cs

public void UpdateFormulaWeight()
    {
        float ftw = mOils.Sum(oil => oil.TotalWeight);
        mFormulaTotalWeight = ftw;

        NotifyPropertyChanged("UsagePercentage");

        foreach (Oil oil in mOils)
        {
            oil.UsagePercentage = (oil.TotalWeight / mFormulaTotalWeight) * 100f;

            if (oil.UsagePercentage > oil.UsageLimit)
                ForegroundColor = "Red";
            else
                ForegroundColor = "LightGray";

            NotifyPropertyChanged("ForegroundColor");
            NotifyPropertyChanged("UsagePercentage");               
        }
    }

private string ForegroundColor
    {
        get { return mForegroundColor; }
        set
        {
            mForegroundColor = value;
            NotifyPropertyChanged("ForegroundColor");
        }
    }

GrayToRed.cs

public class GrayToRed : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string input = value as string;

        switch(input)
        {
            case "Red":
                return Brushes.Red;
            case "LightGray":
                return Brushes.LightGray;
            default:
                return DependencyProperty.UnsetValue;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

}

MainWindow.xaml

<Window.Resources>
    <converters:GrayToRed x:Key="GrayToRed" />
</Window.Resources>
...
<!-- USAGE PERCENTAGE -->
            <DataGridTextColumn Header="Formula %"  Binding="{Binding UsagePercentage,  StringFormat={}{0:F2}%}" IsReadOnly="True" Width="64">
                <DataGridTextColumn.CellStyle>
                    <Style TargetType="DataGridCell">
                        <Setter Property="Background" Value="#1e1e1e"/>
                        <Setter Property="Foreground" Value="{Binding ForegroundColor, Converter={StaticResource GrayToRed}}"/>
                    </Style>
                </DataGridTextColumn.CellStyle>

                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="{x:Type TextBlock}">
                        <Setter Property="TextBlock.VerticalAlignment" Value="Center" />
                        <Setter Property="TextBlock.TextAlignment" Value="Center" />
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...