Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/34: Рейтинг темы: голосов - 34, средняя оценка - 4.76
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
1
.NET 4.x

Отображение картинки в DataGrid в зависимости от контекста

14.01.2016, 18:28. Показов 6148. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется:
XML
1
2
3
4
5
6
7
8
9
10
11
12
<DataGridTemplateColumn Header="Вложения">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Name="IsReadImage" Source="/DocumentsDatabase;component/Images/attach.png" />
                            <DataTemplate.Triggers>
                                <DataTrigger Binding="{Binding IsContainsFiles, ??????????? Value="False">
                                    <Setter TargetName="IsReadImage" Property="Source" Value="/DocumentsDatabase;component/Images/Empty Image.png" />
                                </DataTrigger>
                            </DataTemplate.Triggers>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
Цель: если при заполнении Datagrid в строке с данными содержатся некие данные, то одна картинка - иначе другая.
Проверку вести в ViewModel.
Не пойму как правильно такое сделать.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2016, 18:28
Ответы с готовыми решениями:

Отображение картинки в ячейке DataGrid в зависимости от условия
Добрый день. На форме есть datagrid. Заполняю его из БД.Есть вычисляемый столбец. Если в этом...

dataGrid + image --- отображение картинки по щелчку
В столбце датагрида отображаются картинки. Проблема: визуально кажется, что строки пусты. Потом,...

Динамическое отображение картинки в DataGridView в зависимости от условия
В DataGridView отображается список сотрудников отдела. Как сделать, чтобы в первой колонке...

Отображение данных в одном datagrid при клике в другом datagrid
Здравствуйте! Хотел уточнить, как можно реализовать возможность при клике на форме в dataGrid1,...

7
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
14.01.2016, 18:41  [ТС] 2
Вот как пример того, чего добиться хочу.
При нажатии на строку (в зависимости от настроек) происходит расширение строки.
Миниатюры
Отображение картинки в DataGrid в зависимости от контекста   Отображение картинки в DataGrid в зависимости от контекста   Отображение картинки в DataGrid в зависимости от контекста  

0
879 / 558 / 291
Регистрация: 21.11.2012
Сообщений: 1,553
15.01.2016, 12:00 3
skilllab,

ну сделай в модели свойство типа ImageSource и привяжи колонку датагрида к нему, при заполнении соответственно коллекции, сделай проверку нужного свойства и устанавливай свойству типа ImageSource нужную картинку)

а вообще я похожее делал конвертером
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
15.01.2016, 12:18  [ТС] 4
Цитата Сообщение от hamin Посмотреть сообщение
ну сделай в модели свойство
Оно то дааа... Лень)))
А как конвертером делал?
0
879 / 558 / 291
Регистрация: 21.11.2012
Сообщений: 1,553
15.01.2016, 12:20 5
skilllab,

передавал в него значение проверяемой ячейки/свойства и возвращал нужную картинку
0
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
15.01.2016, 12:21  [ТС] 6
Я с конверторами пока на вы. Можешь подсказать код? Пожалуйста.
0
879 / 558 / 291
Регистрация: 21.11.2012
Сообщений: 1,553
15.01.2016, 12:34 7
Лучший ответ Сообщение было отмечено skilllab как решение

Решение

что-то типа такого:

XML
1
<Image Source="{Binding MyCheckValue, Converter="{StaticResource CheckValueToImgSourceConverter}"}"/>
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class CheckValueToImgSourceConverter: IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is bool)
            {
                   return ((bool)value ? (ImageSource)Application.Current.FindResource("MyBoolImg") : (ImageSource)Application.Current.FindResource("MyNotBoolImg");
            } 
            
          return null;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value;
            //throw new NotImplementedException();
        }
    }
т.е. проверяется свойство типа bool. если оно тру - возвращается картинка из ресурса "MyBoolImg" иначе "MyNotBoolImg".

Добавлено через 4 минуты
и да, соответственно нужно будет где-то, к примеру, ресурсах окна

XML
1
2
3
<Window.Resources>
<local:CheckValueToImgSourceConverter x:key="CheckValueToImgSourceConverter"/>
</Window.Resources>
1
294 / 234 / 58
Регистрация: 03.02.2011
Сообщений: 1,993
Записей в блоге: 1
15.01.2016, 19:08  [ТС] 8
Цитата Сообщение от hamin Посмотреть сообщение
т.е. проверяется свойство типа bool
т.е. всёравно вводить новое свойство в Model?
А значит ещё где его надо будет устанавливать, а значит надо будет проверку вводить, есть ли определённые данные в Model.

Добавлено через 45 минут
Запилил. Но поведение странное.
Сделал конвертер так:
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
public class CheckValueToImgSourceConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value is ObservableCollection<FileReferencesList>)
            {
                Uri oUri = new Uri("pack://application:,,,/" + "DocumentsDatabase" + ";component/" + "/Images/attach.png", UriKind.RelativeOrAbsolute);
                Uri oUri1 = new Uri("pack://application:,,,/" + "DocumentsDatabase" + ";component/" + "/Images/Empty Image.png", UriKind.RelativeOrAbsolute);
 
                ImageSource one = BitmapFrame.Create(oUri);
                ImageSource one1 = BitmapFrame.Create(oUri1);
 
                ObservableCollection<FileReferencesList> ooo = (ObservableCollection<FileReferencesList>)value;
                return ((ooo.Count >0) ? one : one1);
            }
 
            return null;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value;
            //throw new NotImplementedException();
        }
}
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
<DataGridTemplateColumn Header="Вложения">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Image Name="IsReadImage" Source="{Binding DataContext.FileReferencesCollection, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Converter={StaticResource CheckValueToImgSourceConverter}}"/>
                            <!--<Image Name="IsReadImage" Source="/DocumentsDatabase;component/Images/attach.png" />-->
                            <!--<DataTemplate.Triggers>
                                <DataTrigger Binding="{Binding IsContainsFiles, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type viewModels:MainWindowViewModel}}}" Value="False">
                                    <Setter TargetName="IsReadImage" Property="Source" Value="/DocumentsDatabase;component/Images/Empty Image.png" />
                                </DataTrigger>
                            </DataTemplate.Triggers>-->
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

И вот что происходит: при загрузке в DataGrid столбец с картинками пустой, обращение к конвертеру не происходит. При жмакании на строку происходит обращение к конвертеру и столбец ПОЛНОСТЬЮ заполняется значением полученной картинки. Т.е. если в выделенной строке есть List и кол-во не равно нулю - весь столбец в картинках с аттачем; если в строке у List кол-во равно нулю - то весь столбец пустой.
Что сделал не так?
0
15.01.2016, 19:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2016, 19:08
Помогаю со студенческими работами здесь

Вывод из базы данных и отображение расширенного контекста
Всем привет! Только начинаю немного вникать в php, до этого программировать не приходилось, но вот...

Вывод таблицы в зависимости от значения DataGrid
Подскажите, пожалуйста, как в DataGrid2 вывести таблицу, название которой соответствует выбранному...

Картинки в DataGrid
Почему-то когда хочу загрузить картинку в DataGrid, загружает только текст или аналогичный. Видел...

BackColor записи в DataGrid в зависимости от значения поля
Как менять цвет фона записи в DataGrid в зависимости от значения определенного поля


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru