Привязка фона (цвет) для всего ряда телерика: Gridviewdatacontrol WPF Control

StackOverflow https://stackoverflow.com/questions/3687669

Вопрос

У меня есть следующий класс:

public class ErrorMessage
{
    public enum Severity { Error, Warning}

    public ErrorMessage(Severity severity, string description) 
    {
        this.severity = severity;
        this.description = description;
    }
    public Severity severity { get; set; }
    public string description { get; set; }
    public string background
    {
        get
        {
            switch (this.severity)
            {
                case Severity.Error: return "Red";
                case Severity.Warning: return "Yellow";
                default: throw new Exception("severity out of bounds");
            }
        }
    }
}

И я обязательно связываю список ошибок для Teleerik Gridviewdatacontrol WPF Control:

<telerik:GridViewDataControl Margin="0" telerik:StyleManager.Theme="Office_Silver" Name="errorsGridView" AutoGenerateColumns="False" CanUserSortColumns="False" IsFilteringAllowed="False" ShowGroupPanel="False">
    <telerik:GridViewDataControl.Columns>
        <telerik:GridViewDataColumn IsReadOnly="True" UniqueName="{x:Null}" Header="Severity" DataMemberBinding="{Binding severity}" />
        <telerik:GridViewDataColumn IsReadOnly="True" UniqueName="{x:Null}" Header="Description" DataMemberBinding="{Binding description}" />
    </telerik:GridViewDataControl.Columns>
</telerik:GridViewDataControl>

Мне бы хотелось весь цвет фона каждого ряда, который должен быть связан с Errormessage. Как мне это сделать? Заранее спасибо!

Это было полезно?

Решение

Другой метод состоит в том, чтобы использовать rowstyle, который имеет привязку от вашего класса. Чтобы избежать необходимости использовать любой преобразователь или даже событие, измените свой код ошибки к чему-то вроде этого:

public SolidColorBrush background
{
    get
    {        
        switch (this.severity)
        {
            case Severity.Error: return new SolidColorBrush(Colors.Red);                   
            case Severity.Warning: return new SolidColorBrush(Colors.Yellow);
            default: throw new Exception("severity out of bounds");
        }
    }
}

А затем добавьте этот ресурс:

        <Style x:Key="xGridViewRowStyle"
               TargetType="telerik:GridViewRow">
            <Setter Property="Background"
                    Value="{Binding background}" />
        </Style>

А на RadgridView:

RowStyle="{StaticResource xGridViewRowStyle}"

Слегка другой подход, но только что проверил его, и это определенно работает. :)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top