Вы можете использовать IValueConverter
для преобразования цен в цвета и определить DataGridTextColumn.CellStyle
для использования этого конвертера.
Определите это где-нибудь в своем коде:
public class PriceToBackgroundColorConverter : IValueConverter {
// Converts a value into a color.
// Returns Red if value is greater than 100, else White.
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
int price = (int)value;
if (price > 100) {
return Brushes.Red;
} else {
return Brushes.White;
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
throw new NotImplementedException();
}
}
Теперь вы можете использовать этот конвертер, добавив его к Resources
вашего DataGrid
(или любого родительского элемента управления) и используя Setter
для стилизации всех DataGridCell
объектов.
<DataGrid ItemsSource="{Binding Items}">
<DataGrid.Resources>
<wpfapp1:PriceToBackgroundColorConverter x:Key="PriceToBackgroundColorConverter"></wpfapp1:PriceToBackgroundColorConverter>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Price}" Header="Price">
<DataGridTextColumn.CellStyle>
<Style TargetType="DataGridCell">
<Setter Property="Background" Value="{Binding Path=Price, Converter={StaticResource PriceToBackgroundColorConverter}}"></Setter>
</Style>
</DataGridTextColumn.CellStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Это будет указывать вашему DataGridTextColumn
применять Style
ко всем его DataGridCell
дочерним элементам, и это Style
связывает свойство Background
каждого DataGridCell
со своим Price
свойством через PriceToBackgroundColorConverter
.
Вы можете изменить код преобразователя так, чтобы он выполнял любую логику, которую вы хотите, иметь несколько цветов для разных диапазонов и т. Д.
Вы также можете определить больше преобразователей и больше Setter
для изменениядополнительные свойства.