Модераторы: gambit, Kefir, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListView и цвет строки от данных C#, Цвет строки в ListView 
:(
    Опции темы
interv
  Дата 1.8.2012, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



Есть 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)

Как сделать ума не приложу, через тригеры не выходит, через стили тоже... Есть мнение?

Это сообщение отредактировал(а) interv - 1.8.2012, 07:43
PM MAIL   Вверх
mrbrooks
Дата 1.8.2012, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



если имеется ввиду фон - можно создать стиль к 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>


Это сообщение отредактировал(а) mrbrooks - 1.8.2012, 16:47
PM MAIL   Вверх
interv
Дата 2.8.2012, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 24.1.2012

Репутация: нет
Всего: 4



Вроде то что нада спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | WPF и Silverlight | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.