我可能會去綁定的方法,後面的代碼是醜陋的。創建一個帶有錯誤枚舉的屬性,並創建一個DataTemplate或Style,將背景綁定到該屬性。
編輯:例...
在你的類:
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");
}
}
}
此後,您可以使用這樣的轉換器結合背景屬性:
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>
(使用觸發器,由Robert Rossney建議,你可以看到它是很短,需要背後沒有代碼總之,我真的不能想到任何缺點,我不知道爲什麼我沒有這樣做這樣做在第一個地方...)
這看起來像這樣的轉換器(黃色的觸發法更合適):
@ H.B。謝謝,你能爲我提供一個例子嗎? – user683812 2011-03-30 14:30:46
附加了一個廣泛的例子。編輯:哦woops,這是一個DataGrid,而不是一個GridView,我會嘗試移植它... – 2011-03-30 16:20:27
已更改爲ListView等效。 – 2011-03-30 16:27:06