ListView и цвет строки от данных C#

 
0
 
.NET
ava
interv | 01.08.2012, 08:16
Есть ListView lisview и Class PRN_ID

class PRN_ID
{
protected int m_type;
public PRN_ID(int type) { m_type = type; }
public int TypeRow { get { return m_type; } }
public string anyVariable { get { return "any"+m_type.toString(); } }
}

есть заполнение данных

listview.Items.Add(new PRN_ID(1));
listview.Items.Add(new PRN_ID(2));
listview.Items.Add(new PRN_ID(3));
listview.Items.Add(new PRN_ID(4));

Сам ListView

<ListView Name="lisview">
<ListView.View>
<GridView>
<GridViewColumn Header="RowType" Width="50" DisplayMemberBinding='{Binding Path=TypeRow}' />
<GridViewColumn Header="AnyVar" Width="50" DisplayMemberBinding='{Binding Path=anyVariable}'/>
</GridView>
</ListView.View>
</ListView>

Отображение данных на ура, но вот незадача, цвет строки должен зависить от PRN_ID.TypeRow, заданным изначально, например:
1 - Синий (#00f)
2 - Желтый (#ff0)
3 - Красный (#f00)
4 - Фиолетово-желто-коричневый с оттенками морской волны... (#WTF)

Как сделать ума не приложу, через тригеры не выходит, через стили тоже... Есть мнение?
Comments (2)
ava
mrbrooks | 01.08.2012, 15:48 #
если имеется ввиду фон - можно создать стиль к ListViewItem и конвертер к его фону, который будет возвращать цвет в зависимости от PRN_ID.TypeRow.

up хотя если цветов всего четыре можно и в xaml

<ListView x:Name="listview">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding TypeRow}" Value="1">
<Setter Property="Background" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding TypeRow}" Value="2">
<Setter Property="Background" Value="Aqua"/>
</DataTrigger>
<DataTrigger Binding="{Binding TypeRow}" Value="3">
<Setter Property="Background" Value="Bisque"/>
</DataTrigger>
<DataTrigger Binding="{Binding TypeRow}" Value="4">
<Setter Property="Background" Value="Gray"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="TypeRow" DisplayMemberBinding="{Binding TypeRow}"/>
<GridViewColumn Header="AnyVariable" DisplayMemberBinding="{Binding anyVariable}"/>
</GridView>
</ListView.View>
</ListView>


с конвертером

public class BackConv:IValueConverter
{
private static readonly Logger Log = LogManager.GetCurrentClassLogger();

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
switch (System.Convert.ToInt32(value))
{
case 0:
return new SolidColorBrush(Colors.Gold);
case 1:
return new SolidColorBrush(Colors.Gray);
case 2:
return new SolidColorBrush(Colors.Green);
case 3:
return new SolidColorBrush(Colors.Red);
default:
return new SolidColorBrush(Colors.Aquamarine);
}
}

public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}



<ListView x:Name="listview">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Resources>
<loc:BackConv x:Key="conv"/>
</Style.Resources>
<Setter Property="Background" Value="{Binding Path=TypeRow, Converter={StaticResource conv}}"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Header="TypeRow" DisplayMemberBinding="{Binding TypeRow}"/>
<GridViewColumn Header="AnyVariable" DisplayMemberBinding="{Binding anyVariable}"/>
</GridView>
</ListView.View>
</ListView>
ava
interv | 02.08.2012, 09:21 #
Вроде то что нада спасибо
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit