Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269

Отобразить в xaml первый элемент списка картинок

16.08.2019, 10:19. Показов 4152. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
wpf mvvm.
У меня есть список в котором содержаться картинки, часть из них в книжном виде, другая в альбомном.
Задача отобразить их по одной странице(по умолчанию отображается первый элемент списка), и кнопкой вперед/назад менять картинки через команды.

Хотел бы вывести первую картинку чтоб было что-то вроде этого
XML
1
2
3
<ItemsControl
                    ScrollViewer.PanningMode="Both"
                    ItemsSource="{Binding Parent.PdfImages[0]}"/>
и кнопкой менять картинки

Сейчас они отображаются сплошником, идя одной за другой (по сути мне надо заменить скрол кнопкой)

Св-во
C#
1
2
3
4
5
6
private List<Image> _PdfImages;
        public List<Image> PdfImages
        {
            get { return _PdfImages; }
            set { _PdfImages = value; OnPropertyChanged(); }
        }
Добавлено через 6 минут
На мой взгляд надо поменять привязку, чувствую там проблема
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2019, 10:19
Ответы с готовыми решениями:

Вывести содержимое списка в следующем порядке: первый элемент, последний элемент, второй элемент, предпоследни
#include &lt;iostream&gt; #include &lt;list&gt; #include &lt;iterator&gt; void output(std::list&lt;int&gt; myList, std::list&lt;int&gt;::iterator iter1,...

Вернуть первый и последний элемент заданного списка в виде двуэлементного списка
Дано список произвольной длинны .Написать предикат ,который возвращает первый и последний элемент этого списка в виде двуэлементного списка

Определите совпадает ли первый элемент списка Х, с последним элементом списка У
Определите совпадает ли первый элемент списка Х, с последним элементом списка У - помогите реализовать

10
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
16.08.2019, 10:23
добавьте их в листбокс и создайте доп. свойство для отображения текущей:

C#
1
2
3
4
5
private Image _actualImg;
public Image ActualImg
{
      get { return _actualImg; }
      set { _actualImg = value; OnPropertyChanged(); }
XML
1
<ListBox Binding="{Binding PdfImages}" SelectedItem="{Binding ActualImg, Mode=TwoWay}"/>
ну и далее привязывайте элементы уже к этой текущей картинке, а во VM менять ее командами очень просто:

C#
1
ActualImg = PdfImages.FirstOrDefault();
потом можно добавить пару методов расширений для получения след. или предыдущего элемента коллекции:

Кликните здесь для просмотра всего текста

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
/// <summary>
        /// Возвращает элемент коллекции, который следует после переданного. 
        /// </summary>
        /// <param name="col">Исходная коллекция</param>
        /// <param name="actualValue">Текущий элемент коллекции</param>
        /// <returns></returns>
        public static T Next<T>(this IEnumerable<T> col, T actualValue)
        {
            T result = actualValue;
            bool found = false;
 
            foreach (var item in col)
            {
                if (found) return item;
                else
                {
                    found = item.Equals(actualValue);
                }
            }
 
            return result;
        }
 
        /// <summary>
        /// Возвращает элемент коллекции, находящийся перед переданным. 
        /// </summary>
        /// <param name="col">Исходная коллекция</param>
        /// <param name="actualValue">Текущий элемент коллекции</param>
        /// <returns></returns>
        public static T Previous<T>(this IEnumerable<T> col, T actualValue)
        {
            T result = actualValue;
 
            foreach (var item in col)
            {
                if (item.Equals(actualValue)) return result;
                result = item;
            }
 
            return result;
        }
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
16.08.2019, 10:32  [ТС]
hamin, классная идея, спасибо!
Но сейчас ругается на разметку
XML
1
2
3
4
 <Border Grid.Row="0"
                VerticalAlignment="Bottom">
                <ListBox Binding="{Binding PdfImages}" SelectedItem="{Binding ActualImg, Mode=TwoWay}"/>
        </Border>
Член Binding не распознан или недоступен.

Добавлено через 3 минуты
hamin, Указанное значение нельзя присвоить коллекции. Требуется следующий тип: "UIElement".
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
16.08.2019, 10:34
ShmelVG,

там конечно же ItemsSource="{Binding PdfImages}"

Добавлено через 15 секунд
мой косяк
1
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
16.08.2019, 10:43  [ТС]
hamin, Всё супер! Спасибо!!! (Я так делал, подчеркнул ошибку, забыл скомпилить ) Мини вопрос, в команде сделать чтобы листал страницу , запихать проверку чтобы не вылез за рамки списка и инкрементировать список?
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
16.08.2019, 10:48
ShmelVG,

запихать проверку чтобы не вылез за рамки списка
те методы, которые я скинул уже предусматривают это.. они просто возвращают текущий элемент, если уперся в конец или начало

Добавлено через 1 минуту
пользоваться ими просто:

C#
1
ActualImg = PdfImages.Next(ActualImg);
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
16.08.2019, 10:54  [ТС]
hamin, я не знал, но мне посоветовали в моём случае сделать через Image Gallery

Добавлено через 1 минуту
hamin, а в вашем случае отображается первая и частичка второго документа при этом появился скролл которого не должно быть по идее)
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
16.08.2019, 11:25
ShmelVG,

по тому коду что вы представили очень трудно понять, что вы пытаетесь сделать. Скролл можно отключить принудительно, если он вам не нужен, а выбор текущего элемента из коллекции делается так как я описал, а уже в конкретной задаче нужен конкретный подход
0
 Аватар для ShmelVG
171 / 106 / 51
Регистрация: 27.11.2015
Сообщений: 1,269
16.08.2019, 13:19  [ТС]
hamin, в методе добавляли в 2 коллекции, я их записал в одну, но выводить только по одному фото надо , а не сплошником(

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
private List<Image> _OfferPdfImages;
        public List<Image> OfferPdfImages
        {
            get { return _OfferPdfImages; }
            set { _OfferPdfImages = value; OnPropertyChanged(); }
        }
 
        private List<Image> _SpecialConditions;
        public List<Image> SpecialConditions
        {
            get { return _SpecialConditions; }
            set { _SpecialConditions = value; OnPropertyChanged(); }
        }
 
        private List<Image> _PdfImages;
        public List<Image> PdfImages
        {
            get { return _PdfImages; }
            set { _PdfImages = value; OnPropertyChanged(); }
        }
 
        private List<Image> _actualImg;
        public List<Image> ActualImg
        {
            get { return _actualImg; }
            set { _actualImg = value; OnPropertyChanged(); }
        }
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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
private void CheckPdf()
        {
            if (_checkPdfWorked) return;
 
            try
            {
                _checkPdfWorked = true;
 
                if (_publicOfferAddressIsChanged)
                {
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        if (OfferPdfImages != null)
                        {
                            foreach (var image in OfferPdfImages)
                            {
                                image.Source = null;
                            }
                            OfferPdfImages.Clear();
                        }
                        GC.Collect();
                    });
 
                    var files = WorkWithPdf(_publicOfferAddress, "myFile1.pdf");
                    if (files == null)
                        return;
 
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        OfferPdfImages = new List<Image>();
                        foreach (var file in files)
                        {
                            var bi = new BitmapImage();
                            bi.BeginInit();
                            bi.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                            bi.CacheOption = BitmapCacheOption.OnLoad;
                            bi.UriSource = new Uri(file);
                            bi.EndInit();
                            OfferPdfImages.Add(new Image { Source = bi });
 
                            PdfImages = new List<Image>();
                            PdfImages.AddRange(OfferPdfImages);
                        }
                    });
 
                    _publicOfferAddressIsChanged = false;
                }
 
                if (_specialConditionsAddressIsChanged)
                {
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        if (SpecialConditions != null)
                        {
                            foreach (var image in SpecialConditions)
                            {
                                image.Source = null;
                            }
                            SpecialConditions.Clear();
                        }
                        GC.Collect();
                    });
 
                    var files = WorkWithPdf(_specialConditionsAddress, "myFile2.pdf");
 
                    if (files == null)
                        return;
 
                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        SpecialConditions = new List<Image>();
                        foreach (var file in files)
                        {
                            var bi = new BitmapImage();
                            bi.BeginInit();
                            bi.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                            bi.CacheOption = BitmapCacheOption.OnLoad;
                            bi.UriSource = new Uri(file);
                            bi.EndInit();
                            SpecialConditions.Add(new Image { Source = bi });
                            PdfImages.AddRange(SpecialConditions);
                        }
                    });
 
                    _specialConditionsAddressIsChanged = false;
                }
                ActualImg.Add(PdfImages[0]);
            }
            catch (Exception ex)
            {
                Log.Write("Ошибка проверки PDF", ex);
            }
            finally
            {
                _checkPdfWorked = false;
            }
        }
Добавлено через 5 минут
Просто как вывести первую картинку и только?!

Добавлено через 9 минут
В чем ошибка? Почему нельзя так добавить ? PdfImages - тут всё есть.
C#
1
2
3
4
if (PdfImages != null)
                {
                    ActualImg.Add(PdfImages[0]);
                }
Добавлено через 30 минут
Всё ок, забыл создать объект) ActualImg = new List<Image>();
0
880 / 559 / 291
Регистрация: 21.11.2012
Сообщений: 1,554
16.08.2019, 13:21
зачем вы создаете контроллы в коде? так никто не делает.. нужно хранить коллекцию путей к картинкам ну или если они у вас в ресурсах с ключами - коллекцию ключей к этим картинкам..

C#
1
2
3
4
5
public List<string> Sources { get; set; } = new List<string> (){ "C:\myImage1.jpg", "C\image2.jpg"};
public string ActualSource {get; set;}
 
//vm: 
ActualSource =Sources.FirstOrDefault();
далее

XML
1
2
3
4
5
6
7
8
9
10
<ListBox ItemsSource="{Binding Sources}" SelectedItem="{Binding ActualSource}">
    <ListBox.ItemTemplate>
         <StackPanel>
             <Image Source="{Binding}"/>
             <TextBlock Text="{Binding}" Converter="{StaticResource GetNameOfImageConverter}"/>
         </StackPanel>
    </ListBox.ItemTemplate>
</ListBox>
 
<Image Source="{Binding ActualSource }"/>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
16.08.2019, 13:56
Цитата Сообщение от ShmelVG Посмотреть сообщение
классная идея,
Тоже самое я вам уже дал в двух вариантах в теме Переход страниц назад/вперед

Чем они не устроили?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.08.2019, 13:56
Помогаю со студенческими работами здесь

Поменять местами первый элемент первого списка с последним элементом второго списка
Здравствуйте, вот такое задание : Поменять местами первый элемент первого списка с последним элементом второго списка и наоборот....

Функция которая возвращает первый, второй, предпоследний и последний элемент списка, в виде четырехэлементного списка
Был бы признателен за помощь. И если не затруднит, то с комментариями. Задание: Дан список произвольной длинны. Написать функцию,...

Первый элемент списка переместить в конце списка
Привет. Надо первый элемент списка переместить в конце списка. Может у кого есть пример кода?

Удалить первый элемент из списка
Всем хай! Есть задача, создать список и выполнить некие операции надо ним и так список: struct element { char a; ...

Удалить первый элемент из списка
Добрый вечер! Снова беспокою вас по спискам. На этот раз работаем с ООП,создали классы,методы. Так вот нужно создать процедуру...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru