WPF数据网格行颜色变化基于变量

本文关键字:于变量 变量 变化 数据网 数据 网格 颜色 WPF | 更新日期: 2023-09-27 18:05:15

我正在使用数据触发器来更改DataGrid视图组件中行的颜色。代码是:

class QuantityToColorConverter : IValueConverter
{
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return (int)value <= 444 ?
                new SolidColorBrush(Colors.Red)
                : new SolidColorBrush(Colors.White);
        }
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new Exception("The method or operation is not implemented.");
        }
}

我如何用一个变量替换'444'值,该变量具有button_click函数中网格单元值的一些计算结果?

编辑:使它更清楚我需要:我想改变的行,其中一列的值大于平均值的颜色。由于平均值是基于DataGrid数据计算的,因此我需要将其作为变量而不是444常量发送。

edit:按钮代码:

private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        var engine = new FileHelperEngine<ActionLog>();
        var result = engine.ReadFile("browse.csv");
        // result is now an array of ActionLog
        var actionsCnt = new int[22];
        int curAccessId =  result[1].AccessId;
        int AccessCount = 0;
        foreach (var record in result)
        {
            actionsCnt[record.ActionType]++;
            if (record.AccessId != curAccessId) { curAccessId = record.AccessId;  AccessCount++; }
        }
        quantityThreshold = AccessCount;
        List<act> myList = new List<act>();
        for (int i = 0; i < 22; i++)
            myList.Add(new act() { actionID = i, quantity = actionsCnt[i] });
        grid1.ItemsSource = myList;
        engine.WriteFile("FileOut.csv", result);
    }

quantityThreshold是我想使用的变量,而不是'444'

WPF数据网格行颜色变化基于变量

将计算变量绑定到转换器的ConverterParameter。参见此线程绑定到转换器参数

 return (int)value <= (int)parameter?
                new SolidColorBrush(Colors.Red)
                : new SolidColorBrush(Colors.White);

try this

<DataGrid>
    <DataGrid.CellStyle>
        <Style TargetType="{x:Type DataGridCell}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding SomeProperty}" Value="SomeValue" >
                    <Setter Property="Foreground" Value="Blue" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.CellStyle>
</DataGrid>

请参考此链接

您可以将参数传递给转换器,像这样

...
Binding="{Binding ValueToBind, Converter={SomeConverter},ConverterParameter=YourParameteres}"
...

然后在转换器中使用它作为对象参数