Я решил эту проблему, написав конвертер, который реализует интерфейс IValueConverter.
если вы хотите увидеть свой конвертер в XAML, вам нужно сослаться на статический ресурс, подобный этому
<Window.Resources>
<local:myConverter x:Key="myConverter"/>
</Window.Resources>
Мой дизайн;
<Grid>
<DataGrid Name="dgList" Background="LightGray" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.Columns >
<DataGridTextColumn Width="100" Header="ID" Binding="{Binding ID}"></DataGridTextColumn>
<DataGridTextColumn Width="100" Header="Batterie" Binding="{Binding Battery}" >
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Background" Value="{Binding Battery, Converter={StaticResource myConverter}}"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Width="100" Header="Current Use" Binding="{Binding CurrentUse}"></DataGridTextColumn>
<DataGridTextColumn Width="100" Header="Occupancy" Binding="{Binding Occupancy}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
Эта привязка берет ваши данные Battery (10,30,40,80 и т. Д.) И отправляет конвертеру. Преобразователь возвращает объект, и наш объект должен быть SolidColorBrush, чтобы связать его для BackGround. Это все .Я решил так
<Setter Property="Background" Value="{Binding Battery, Converter={StaticResource myConverter}}"></Setter>
myConverter для преобразования данных в фоновый режим;
public class myConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
SolidColorBrush clr;
if (int.Parse(value.ToString()) >= 80)
clr = new SolidColorBrush(Colors.Green);
else if (int.Parse(value.ToString()) >= 40)
clr = new SolidColorBrush(Colors.Orange);
else if (int.Parse(value.ToString()) >= 0)
clr = new SolidColorBrush(Colors.Red);
else
clr = new SolidColorBrush(Colors.White);
return clr;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Я создал класс для вашего примера (я не видел ваш, если я ошибаюсь, извините)
public class Class1
{
public int ID { get; set; }
public string Battery { get; set; }
public string CurrentUse { get; set; }
public string Occupancy { get; set; }
public static List<Class1> myList = new List<Class1>()
{
new Class1() {ID = 1, Battery = "70", CurrentUse = "xxxx", Occupancy = "xxxx" },
new Class1() {ID = 2, Battery = "100", CurrentUse = "xxxx", Occupancy = "xxxx" },
new Class1() {ID = 3, Battery = "10", CurrentUse = "xxxx", Occupancy = "xxxx" },
new Class1() {ID = 4, Battery = "50", CurrentUse = "xxxx", Occupancy = "xxxx" },
new Class1() {ID = 5, Battery = "80", CurrentUse = "xxxx", Occupancy = "xxxx" },
new Class1() {ID = 6, Battery = "40", CurrentUse = "xxxx", Occupancy = "xxxx" },
new Class1() {ID = 7, Battery = "39", CurrentUse = "xxxx", Occupancy = "xxxx" }
};
}
в главном окне
private void Window_Loaded(object sender, RoutedEventArgs e)
{
dgList.ItemsSource = Class1.myList;
}
Мои скриншоты из проекта.
![enter image description here](https://i.stack.imgur.com/2XMkD.png)
![enter image description here](https://i.stack.imgur.com/FpT0h.png)