powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Раскрашивание строки в DataGrid
3 сообщений из 3, страница 1 из 1
Раскрашивание строки в DataGrid
    #39379275
Erik_Kartmann
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
раскомменчиваю слдующий текст в грид вьюве
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
            <!--<DataGrid.RowStyle >
                <Style TargetType="{x:Type DataGridRow}">
                    <Style.Triggers>

                        <DataTrigger Binding="{Binding is_anycontent}" Value="True">
                            <Setter Property="Background" Value="LightGray" />
                        </DataTrigger>
                        <DataTrigger Binding="{Binding is_error}" Value="True">
                            <Setter Property="Background" Value="Pink"  />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.RowStyle>-->
            


И всё скорость отображения списка на 6000 записей, да даже на 100 падает стократно. Как правильно раскрашивать строки?
...
Рейтинг: 0 / 0
Раскрашивание строки в DataGrid
    #39379961
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erik_Kartmann,

LoadingRow
...
Рейтинг: 0 / 0
Раскрашивание строки в DataGrid
    #39380107
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А) Использовать виртуализацию
Б) Переопределить шаблон строки и ячеек удалив всё ненужное, в шаблоне, вместо триггера в данном вариант уместнее будет конвертор. Есть отличный базовый конвертор BooleanConverter<T>:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
using System;
using System.Globalization;
using System.Windows.Data;
using System.Windows.Media;

namespace WPFToolKit
{
    public abstract class BaseBoolConverter<T> : IValueConverter
    {
        public T True { set; get; }
        public T False { set; get; }
        protected virtual T Convert(bool value, Type targetType, object parameter, CultureInfo culture)
        {
            return value ? True : False;
        }
        protected virtual bool ConvertBack(T value, Type targetType, object parameter, CultureInfo culturae)
        {
            if (Equals(value, True))
                return true;
            else if (Equals(value, False))
                return false;
            else
                throw new ArgumentOutOfRangeException(nameof(value));
        }

        object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Convert((bool)value, targetType, parameter, culture);
        }

        object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return ConvertBack((T)value, targetType, parameter, culture);
        }
    }
    public class BoolToBrushConverter : BaseBoolConverter<Brush> { }
    public class BoolToBoolConverter : BaseBoolConverter<bool> {}
    public class BoolToNegativeConverter : BoolToBoolConverter
    {
        public BoolToNegativeConverter() { True = false; False = true; }
    }
}


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<Window x:Class="WPFToolKit.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WPFToolKit"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{StaticResource MainModel}">
    <Window.Resources>
        <local:BoolToBrushConverter x:Key="BoolToBrushConverter" 
                                    True="Red"
                                    False="Green"/>
    </Window.Resources>
    <Grid>
        <Border Width="100" Height="100" Background="{Binding BoolValue, Converter={StaticResource BoolToBrushConverter}}"/>
    </Grid>
</Window>



В) Вообще цвет фона строки можно определять через цвет фона ячеек (как альтернативный вариант)
Г) Если ячеек получается очень много порядка 5000-10000 тысяч, то выход только 1 прорисовывать (Render'ить) все ячейки через Visual
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / Раскрашивание строки в DataGrid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]