为telerik:GridViewDataControl WPF控件的整行绑定背景(颜色)

3

我有以下的类:

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

我正在将一个ErrorMessage列表绑定到一个telerik的GridViewDataControl WPF控件:

<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.background属性绑定。我该怎么做?谢谢!
1个回答

10

另一种方法是使用具有从您的类绑定的 RowStyle。为了避免使用任何转换器甚至事件,将您的 ErrorMessage 代码更改为以下内容:

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

方法略有不同,但我刚测试了一下,它绝对有效。 :)


对于Silverlight,您需要像这篇文章所说的那样做:http://blogs.msdn.com/b/delay/archive/2009/11/02/as-the-platform-evolves-so-do-the-workarounds-better-settervaluebindinghelper-makes-silverlight-setters-better-er.aspx - JasonRShaver
1
对于Silverlight,您可以在RowStyle元素内部进行绑定: - ShawnFeatherly

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接