我有一个绑定到ObservableCollection mPersonList的ListView。班级人员得到了一个enum Sex。我想要做的是将ListViewItem的背景设置为绿色(如果此人是男性),如果此人是女性则设置为红色。
感谢您的回答!
我试过这样但是它错了吗?
<Style x:Key="CustomListViewItemStyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Background" Value="{Binding Path=Status, Converter={StaticResource sexEnumToColor}}" />
</Style>
和
public class SexEnumToColor : IValueConverter
{
#region IValueConverter Member
object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
Sex tempSex = (Sex)value;
Brush retval;
switch (tempSex )
{
case Sex.Male:
retval = Brushes.Blue;
break;
case Sex.Female:
retval = Brushes.Red;
break;
default:
retval = Brushes.Black;
break;
}
return retval;
}
object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
答案 0 :(得分:1)
如果您没有使用数据模板,则明确地将绑定添加到ListViewItem
的数据模板将不起作用。在这种情况下,你需要让风格发挥作用,并使其发挥作用,你需要知道它为什么不起作用。
你的风格出了什么问题,你已经分配了一把钥匙。创建任何元素时,WPF在资源字典中搜索其键为该元素类型的Style
对象。如果找到一个,那就是它适用的风格。如果没有,则不会应用任何样式。
如果在样式声明中指定TargetType
但省略x:Key
,则在将其添加到资源字典时分配的键是该类型。但是,由于您已明确指定了样式的键,因此这是指定的键。所以WPF从来没有找到它,也没有得到应用。
由于您不希望将此样式全局添加到窗口中的每个ListViewItem
,因此要做的事情可能是将其添加到ListView
的资源字典中:
<ListView ItemsSource="{DynamicResource Data}">
<ListView.Resources>
<local:SexToColorConverter x:Key="SexConverter" />
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Background"
Value="{Binding Path=Sex, Converter={StaticResource SexConverter}}" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Header="Name"
DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Sex"
DisplayMemberBinding="{Binding Sex}" />
</GridView>
</ListView.View>
</ListView>
答案 1 :(得分:0)
在Person类的模板中使用DataTrigger。
如果您发布了部分类定义和当前模板,我们可以完成它。
答案 2 :(得分:0)
您可以使用转换器绑定性别属性。像这样:
<ListView>
<ListView.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding name}" Background="{Binding sex, Converter={StaticResource converterSexToColor}}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
和转换器:
public class ConverterSexToColor : IValueConverter
{
public object Convert(object value, Type targeTtype, object parameter, System.Globalization.CultureInfo culture)
{
return (Sex)value == Sex.Male ? Brushes.Green : Brushes.Red;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}