Я бы, наверное, выбрал обязательный подход, код позади уродлив.Создайте свойство с перечислением ошибок и создайте DataTemplate или стиль, в котором вы привязываете фон к указанному свойству.
Редактировать: Пример ...
В вашем классе:
public enum ParsingStatus { None, Completed, XmlError, HtmlError }
private ParsingStatus _status = ParsingStatus.None;
public ParsingStatus Status
{
get { return _status; }
set
{
if (_status != value)
{
_status = value;
NotifyPropertyChanged("Status");
}
}
}
Затем вы можете связать свойство background с помощью конвертера, например:
public class ErrorToBrushConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Employee.ParsingStatus input = (Employee.ParsingStatus)value;
switch (input)
{
case Employee.ParsingStatus.None:
return null;
case Employee.ParsingStatus.Completed:
return Brushes.LightGreen;
case Employee.ParsingStatus.XmlError:
return Brushes.Pink;
case Employee.ParsingStatus.HtmlError:
return Brushes.Yellow;
default:
return null;
}
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
}
И соответствующий XAML:
<Window.Resources>
<local:ErrorToBrushConverter x:Key="ErrorToBrushConv"/>
...
</Window.Resources>
...
<ListView ItemsSource="{Binding Data}">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Background"
Value="{Binding Status, Converter={StaticResource ErrorToBrushConv}}"/>
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
Или выУкажите только стиль и выполните переключение состояния с помощью триггеров:
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="XmlError">
<Setter Property="Background" Value="Pink"/>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="HtmlError">
<Setter Property="Background" Value="#FFFFFF66"/>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="Completed">
<Setter Property="Background" Value="LightGreen"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
( Роберт Россни предложил использовать триггеры, так как вы можете видеть, что он довольно короткий и не требует кода вообщеЯ не могу думать о каких-либо недостатках в этом, и я понятия не имею, почему я не сделал это, как это в первую очередь ... )
Что выглядит так с конвертером (желтыйтриггер-метод больше подходит):![A colourful ListView](https://i.stack.imgur.com/oYaiD.png)