Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
skilllab
211 / 185 / 50
Регистрация: 03.02.2011
Сообщений: 1,781
Записей в блоге: 1
Завершенные тесты: 1
1

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

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

Имеется:
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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2016, 18:28
Ответы с готовыми решениями:

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

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

Медленное отображение DataGrid
Здравствуйте, форумчане! Появилась проблема с первым отображением DataGrig...

Отображение коллекции в DataGrid
Привет всем! Есть коллекция: private ObservableCollection&lt;Points&gt;...

Отображение по надобности DataGrid
Здравствуйте. Задача следующая. Имеется DataGrid, назовём его RootDG, в...

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

hamin
261 / 246 / 170
Регистрация: 21.11.2012
Сообщений: 809
15.01.2016, 12:00 3
skilllab,

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

а вообще я похожее делал конвертером
0
skilllab
211 / 185 / 50
Регистрация: 03.02.2011
Сообщений: 1,781
Записей в блоге: 1
Завершенные тесты: 1
15.01.2016, 12:18  [ТС] 4
Цитата Сообщение от hamin Посмотреть сообщение
ну сделай в модели свойство
Оно то дааа... Лень)))
А как конвертером делал?
0
hamin
261 / 246 / 170
Регистрация: 21.11.2012
Сообщений: 809
15.01.2016, 12:20 5
skilllab,

передавал в него значение проверяемой ячейки/свойства и возвращал нужную картинку
0
skilllab
211 / 185 / 50
Регистрация: 03.02.2011
Сообщений: 1,781
Записей в блоге: 1
Завершенные тесты: 1
15.01.2016, 12:21  [ТС] 6
Я с конверторами пока на вы. Можешь подсказать код? Пожалуйста.
0
hamin
261 / 246 / 170
Регистрация: 21.11.2012
Сообщений: 809
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
skilllab
211 / 185 / 50
Регистрация: 03.02.2011
Сообщений: 1,781
Записей в блоге: 1
Завершенные тесты: 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.01.2016, 19:08

Отображение матрицы в dataGrid
Собственно весь и вопрос в том, каким образом отображать матрицу чисел в...

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

DataGrid. Отображение свойств по категориям
Приветствую.Такая проблема. Есть два DataGrid'а. Есть класс объекта у которого...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru