C# WPF DataGrid基于规则的多列颜色
我开始开发一个WPF应用程序,现在我集成了一个带有一些十进制值的DataGrid。这些价值如息税前利润、净资产收益率等 现在我想知道,如果息税前利润超过12,如何给单元格着色,如果净资产收益率低于20,如何给单元格着色 当我使用网格开发ASP.NET时,我有OnRowDataBound事件来完成这些工作 有什么想法吗 致以最良好的祝愿,C# WPF DataGrid基于规则的多列颜色,c#,wpf,gridview,C#,Wpf,Gridview,我开始开发一个WPF应用程序,现在我集成了一个带有一些十进制值的DataGrid。这些价值如息税前利润、净资产收益率等 现在我想知道,如果息税前利润超过12,如何给单元格着色,如果净资产收益率低于20,如何给单元格着色 当我使用网格开发ASP.NET时,我有OnRowDataBound事件来完成这些工作 有什么想法吗 致以最良好的祝愿, Rayk您应该使用转换器来执行此操作() 例如: 颜色转换器转换器: class ColorConverter : IValueConverter {
Rayk您应该使用转换器来执行此操作() 例如:
颜色转换器
转换器:
class ColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null && parameter != null)
{
double? dValue = value as double?;
if (!dValue.HasValue) return Binding.DoNothing;
var items = parameter.ToString().Split(' ');
if(items.Length == 2)
{
double cValue;
if(!double.TryParse(items[1], out cValue))
return Binding.DoNothing;
switch (items[0])
{
case "<":
if (dValue.Value < cValue)
return new SolidColorBrush(Colors.Red);
break;
case ">":
if (dValue.Value > cValue)
return new SolidColorBrush(Colors.Red);
break;
default:
break;
}
}
}
return Binding.DoNothing;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
解决方案2:
数据类:
class Data : INotifyPropertyChanged
{
private double _RoE;
public double RoE
{
get { return _RoE; }
set
{
_RoE = value;
if (value < 10)
RoEColor = new SolidColorBrush(Colors.Red);
else if (value > 20)
RoEColor = new SolidColorBrush(Colors.Green);
else
RoEColor = new SolidColorBrush(Colors.White);
OnPropertyChanged("RoE");
}
}
private SolidColorBrush _RoEColor;
public SolidColorBrush RoEColor
{
get { return _RoEColor; }
set { _RoEColor = value; OnPropertyChanged("RoEColor"); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(name));
}
}
很不错的!converter参数是关键。但是如果我有三个范围,小于2的是红色,大于12的是绿色。在白色之间。我是否应该扩展ConverterParameter?是的,您应该扩展ConverterParameter(代码):)嗯,是否可以从绑定对象传递另一个属性值。e、 罗埃科。。。这里我关心的是,我不想将验证逻辑保留在转换器类中。也许我可以将结果传递给参数?@Rayk再次检查我的答案(解决方案2):)是的,这就是我要搜索的。谢谢
class Data : INotifyPropertyChanged
{
private double _RoE;
public double RoE
{
get { return _RoE; }
set
{
_RoE = value;
if (value < 10)
RoEColor = new SolidColorBrush(Colors.Red);
else if (value > 20)
RoEColor = new SolidColorBrush(Colors.Green);
else
RoEColor = new SolidColorBrush(Colors.White);
OnPropertyChanged("RoE");
}
}
private SolidColorBrush _RoEColor;
public SolidColorBrush RoEColor
{
get { return _RoEColor; }
set { _RoEColor = value; OnPropertyChanged("RoEColor"); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
handler(this, new PropertyChangedEventArgs(name));
}
}
<DataGrid ItemsSource="{Binding}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding RoE}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="{Binding RoEColor}"/>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>