数据绑定到静态类的枚举

时间:2018-06-24 10:15:30

标签: wpf data-binding

章, 我有一个数据网格,并按如下所示给行着色。

    <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 :(得分:0)

首先,请确保使用“画笔”而不是“颜色”为属性(如“前景”或“背景”)分配值。

然后,您可以在ColourSchemes类中添加一个indexer属性,该属性将枚举值作为键:

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]}"/>

不过,您可能想看看Dynamic Resources