Привязка данных к перечислению статического класса - PullRequest
0 голосов
/ 24 июня 2018

Ребята, у меня есть сетка данных, и я окрашиваю строки следующим образом.

    <DataGrid.Resources>
        <Style TargetType="{x:Type DataGridCell}" >
        <Style.Triggers>
              <Trigger Property="DataGridCell.IsSelected" Value="True">
                    <Setter Property="Foreground" Value="Blue" />
                    <Setter Property="Background" Value="White" />
             </Trigger>
            <DataTrigger Binding="{Binding ErrorType}" Value="TerminalError">
                 <Setter Property ="Foreground" Value="Purple"/>
            </DataTrigger>
           <DataTrigger Binding="{Binding ErrorType}" Value="CriticalError">
                <Setter Property ="Foreground" Value="Red"/>
           </DataTrigger>
       </Style.Triggers>
    </Style>
 </DataGrid.Resources>

В настоящее время цвета жестко запрограммированы, и мне нужно это изменить.У меня есть одноэлементный класс, который содержит цвета для разных состояний, и цвета могут быть доступны следующим образом:

Color returnedColour = ColourSchemes.Instance.GetColour (CriticalError)

Так что в xaml, где у меня есть Value = "Red" и т. Д., Я хочу получить источникимя из глобально доступного объекта ColourSchemes вместо этого.Буду очень признателен за любые слова мудрости.

1 Ответ

0 голосов
/ 24 июня 2018

Сначала убедитесь, что вы используете Brush вместо Color, что назначаете значение для свойства, такого как Foreground или Background.

Затем вы можете добавить свойство indexer в ваш класс ColourSchemes, который принимает значение enumв качестве ключа:

public enum ErrorType
{
    TerminalError, CriticalError
}

public class ColourSchemes
{
    private readonly Dictionary<ErrorType, Brush> brushes =
        new Dictionary<ErrorType, Brush>
        {
            { ErrorType.TerminalError, Brushes.Orange },
            { ErrorType.CriticalError, Brushes.Red }
        };

    public Brush this[ErrorType value]
    {
        get { return brushes[value]; }
    }

    public static ColourSchemes Instance { get; } = new ColourSchemes();
}

Теперь вы можете связать свойство следующим образом:

Background="{Binding Source={x:Static local:ColourSchemes.Instance}, Path=[CriticalError]}">

Или в сеттере:

<Setter Property="Background"
    Value="{Binding Source={x:Static local:ColourSchemes.Instance}, Path=[CriticalError]}"/>

Однако вы можетехочу взглянуть на Динамические ресурсы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...