Datagrid行背景不刷新

时间:2015-05-04 10:56:11

标签: c# wpf datagrid

我有一个要求,我需要在Datagrid行背景中显示一行。所以我写了这段代码:

        <DataGrid.RowBackground>
            <LinearGradientBrush EndPoint="0,0" StartPoint="{Binding GradientPoint}" MappingMode="Absolute"  SpreadMethod="Repeat">
                <GradientStop Color="{Binding LineColor}" Offset="0" />
                <GradientStop Color="{Binding LineColor}" Offset="0.1" />
                <GradientStop Color="White" Offset="0.1" />
                <GradientStop Color="White" Offset="1" />
            </LinearGradientBrush>
        </DataGrid.RowBackground>

现在,我可以第一次成功画一条线。我有一些代码可以进行一些格式化,并更改数据网格行的高度。一旦它改变了高度,我调用下面的代码,我假设Brush应该从绑定中获取Color和Start Point。绑定应该将新值返回到DataGrid Row Background。

        dtMainGrid.Items.Refresh();
        dtMainGrid.UpdateLayout();

编辑:我也尝试包含这个,但没有帮助:(

        dtMainGrid.InvalidateVisual();

但是,问题是,当我刷新Items,甚至是布局时,DataGrid RowBackground画笔都没有刷新。它似乎是将点和颜色存储在缓存中并且没有刷新布局,所以我的线路没有移动,因为它没有刷新。

任何帮助?

编辑:添加我的属性:

    private System.Windows.Media.Color lColor;
    public System.Windows.Media.Color LineColor
    {
        get
        {
            return lColor;
        }
        set
        {

            lColor = value;
        }
    }

    public System.Windows.Point GradientPoint { get { return Context.GetContext().GradientPoint; } }

好的,万一有人想知道,这些房产都很好。就是这样,它是第一次被调用,并且对于后续请求,它甚至不被调用。我通过提供断点来测试它。

编辑2#:在此处添加解决方案。对于属性使用了数据触发器,因为我只能在我的属性Gradient Point中找到四个不同的选项,我只需要添加4个数据触发器,如下所示:

            <DataTrigger Binding="{Binding GradientPoint}" Value="1">
                <Setter Property="Background">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0,0" StartPoint="0,15" MappingMode="Absolute"  SpreadMethod="Repeat">
                            <GradientStop Color="{Binding LineColor}" Offset="0" />
                            <GradientStop Color="{Binding LineColor}"  Offset="0.05" />
                            <GradientStop Color="White" Offset="0.05" />
                            <GradientStop Color="White" Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </DataTrigger>

谢谢, V

0 个答案:

没有答案