gpt4 book ai didi

wpf - 使用 datatriggers 和 IValueConverter 更新 datagridview 行背景颜色

转载 作者:行者123 更新时间:2023-12-01 09:52:50 35 4
gpt4 key购买 nike

我有一个 datagridview 并试图根据一列和其他两列之间的比较结果动态更新行的背景颜色。我的 datagridview 绑定(bind)到数据表。 datagridview 中的三个不同列是最小值、最大值和当前值。最小和最大列中的值是静态的,不会改变。每行的当前列中的值动态更新。

我使用一个名为 MinMaxTester 的类,它实现了 IValueConverter 接口(interface)来比较单元格的内容以返回画笔颜色。

在我实现的解决方案中,我注意到背景颜色有时会更新。 datagridview 是选项卡控件中选项卡项的一部分。当 datagridview 对用户不可见时,背景颜色通常会更新。当 datagridview 对用户可见时(即选项卡控件内的选项卡项已被选中),背景颜色将不会更新。

我想知道我需要在我的解决方案中更改什么才能使行背景颜色始终更新?

XAML文件代码

<Window.Resources>
<local:MinMaxTester x:Key="MinMaxTester"/>
</Window.Resources>

<DataGrid.Columns>
<DataGridTextColumn Header="Present" Binding="{Binding Present}"/>
<DataGridTextColumn Header="Min" Binding="{Binding Min}"/>
<DataGridTextColumn Header="Max" Binding="{Binding Max}"/>
</DataGrid.Columns>

<DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="{Binding Converter={StaticResource MinMaxTester}}"/>
</Style>
<DataGrid.RowStyle>

实现代码

[ValueConversion(typeof(DataRowView),typeof(Brush))]
public class MinMaxTester: IValueConverter
{
public object Convert(object datagridrow, Type target, object parameter, System.Globalization.CultureInfo culture)
{
int min, max, present;
DataRowView r = datagridrow as DataRowView;
min = int.Parse(r["Min"].ToString());
max = int.Parse(r["Max"].ToString());
present = int.Parse(r["Present"].ToString());
if (present >= min && present <= max)
return Brushes.Green;
else
return Brushes.Red;
}
public object ConvertBack(object datagridrow, Type target, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException("Not using the ConvertBack function in MinMaxTester");

}
}

最佳答案

你试过吗?

<Window.Resources>
<my:RowBackgroundColorConverter x:Key="rowBackgroundColorConverterResource"></my:RowBackgroundColorConverter>
</Window.Resources>

   <DataGrid.RowStyle>
<Style TargetType="{x:Type DataGridRow}">
<Setter Property="Background" Value="{Binding fieldXXX, Converter={StaticResource converterXXX}}"></Setter>
</Style>
</DataGrid.RowStyle>

和转换器代码:

using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;
using System.Windows;
using System.Windows.Controls;

namespace XXX.Converters
{
public class RowBackgroundColorConverter : IValueConverter
{
private readonly Color expiredColor = Colors.Red;

private readonly Color normalColor = Colors.Gray;

public object Convert(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{

if (XXXXX)
return new SolidColorBrush(expiredColor);

return new SolidColorBrush(normalColor);
}

public object ConvertBack(
object value,
Type targetType,
object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
}

关于wpf - 使用 datatriggers 和 IValueConverter 更新 datagridview 行背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15435640/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com