Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 06.08.2018
Сообщений: 22

Отображение картинок в ListView

11.08.2018, 19:25. Показов 3227. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ни дня без вопросов!

Есть задачка, ученическая. И наверняка что то подобное уже много раз было, но я не нашел.

Есть список файлов, из них нужно выдрать иконки, сложить в какой то лист и потом показать эти иконки в listview.

Мне не нужно готовое решение, достаточно будет указать где есть ответы:

Как выдрать иконки?
В каком формате лучше всего их положить в list и как?
Как эти иконки показать в listview?

Есть какой то бестпрактикс? а то в учебниках какая то муть.

ПС и да, я новичок. очень ядовитый новичок

ППС, промазал, не в ту категорию поместил. речь идет о MPF, конечно же.

Добавлено через 1 час 21 минуту
Как оказывается, я нифига не ленивый. Самый голый проект, ну пусть будет MVVM, в самом своём простом виде выглядит примерно так.

App.xaml
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
<Application x:Class="WpfForum.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:WpfForum"
             StartupUri="View.xaml">
</Application>

View.xaml
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Window x:Class="WpfForum.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:WpfForum"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800"  WindowStartupLocation="CenterScreen">
    <Grid>
        <ListView Margin="10">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Картинка"/>
                    <GridViewColumn Header="Программа"/>
                </GridView>
            </ListView.View>
        </ListView>
 
    </Grid>
</Window>

View.xaml.cs
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using System.Windows;
 
namespace WpfForum
{
    public partial class MainWindow : Window
    {
        public ViewModel viewModel = new ViewModel();
 
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

ViewModel.cs
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
namespace WpfForum
{
    public class ViewModel
    {
        public Model model = new Model();
 
        // ICommand связывают события во вью с данными, например можно загрузить данные по команде.
    }
}

Model.cs
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System.Collections.Generic;
 
namespace WpfForum
{
    public class Model
    {
        public List<Item> Items = new List<Item>();
 
        public void LoadItems(string dirPath)
        {
            // загрузка данных
        }
    }
 
    public class Item
    {
        public string Icon; // картинк0
        public string FilePath; // программа
    }
}


Это всё просто, на уровне понимания, как в MVVM должны быть разделены слои.

Но, что бы заставить всё работать, нужно куда то в этой прекрасной и простой программе напихать нотификейшенов, депендовсов, командов, ну и биндингов.

Мне это понятно, что так нужно сделать, не понятно куда именно и что пихать! Ну и вопрос с форматом Icon то же остался, какой выбрать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.08.2018, 19:25
Ответы с готовыми решениями:

Привязка картинок к Image в ListView
Помогите связать поле Image c файлом на жестком диске В общем есть класс с полем пути к файлу public class User { ...

Отображение картинок (плитка)
Доброго времени суток, форумчане. Начну по порядку. У меня возникла потребность отобразить картинки в плитке, но как это сделать я не...

Отображение данных в ListView
Добрый день! Не получается отобразить данные в ListView c использованием данного стиля: &lt;Style x:Key=&quot;LVImStyle&quot;...

4
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
13.08.2018, 18:12
Цитата Сообщение от BrodiagaNG Посмотреть сообщение
Как выдрать иконки?
https://stackoverflow.com/a/31346032
Цитата Сообщение от BrodiagaNG Посмотреть сообщение
В каком формате лучше всего их положить в list и как?
Зачем?
Цитата Сообщение от BrodiagaNG Посмотреть сообщение
Как эти иконки показать в listview?
Биндинг пути через конвертер пути файла в ImageSource

Добавлено через 38 минут
Вот маленький пример:
ViewModel
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
using System;
using System.Collections.ObjectModel;
using System.Windows;
 
namespace WpfApp1
{
    internal class ViewModel : DependencyObject
    {
 
 
        public ObservableCollection<string> FilePaths
        {
            get { return (ObservableCollection<string>)GetValue(FilePathsProperty); }
            set { SetValue(FilePathsProperty, value); }
        }
 
        // Using a DependencyProperty as the backing store for FilePaths.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty FilePathsProperty =
            DependencyProperty.Register("FilePaths", typeof(ObservableCollection<string>), typeof(ViewModel), new PropertyMetadata(default(ObservableCollection<string>)));
 
        public ViewModel()
        {
            //Берём файлы с рабочего стола
            FilePaths = new ObservableCollection<string>(System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)));
        }
    }
}

Конвертер
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using System.Globalization;
using System.Windows.Data;
 
namespace WpfApp1
{
    internal class PathToIconConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var path = value.ToString();
            return IconManager.FindIconForFilename(path, false);
            //throw new NotImplementedException();
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}

Разметка
XML
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
<Window x:Class="WpfApp1.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:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow"
        Height="450"
        Width="800">
    <Window.Resources>
        <local:PathToIconConverter x:Key="PathToIconConverter" />
    </Window.Resources>
    <ListView ItemsSource="{Binding FilePaths}">
        <ListView.Resources>
            <DataTemplate x:Key="IconCellTemplate">
                <Image Source="{Binding Converter={StaticResource PathToIconConverter}}" />
            </DataTemplate>
        </ListView.Resources>
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Иконка"
                                CellTemplate="{StaticResource IconCellTemplate}" />
                <GridViewColumn Header="Путь"
                                DisplayMemberBinding="{Binding}" />
            </GridView>
        </ListView.View>
    </ListView>
</Window>

CodeBehind только для упрощения связки окна с моделью представления
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System.Windows;
 
namespace WpfApp1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new ViewModel();
        }
    }
}
Вложения
Тип файла: zip WpfApp1.zip (11.8 Кб, 21 просмотров)
0
0 / 0 / 0
Регистрация: 06.08.2018
Сообщений: 22
13.08.2018, 21:02  [ТС]
Ага, спасибо, кажется я понял как примерно всё устроено в этом примере. Прикольно.

Насколько мне понятно, в феншуе MVVM требуется, что бы конвертеры, которые занимаются преобразование данных модели (Model) в вид пригодный для отображения (View), должны находиться на уровне модели отображения (ViewModel).

Поймите правильно, я не спорю, а пишу просто для того, что бы самому лучше вникнуть.
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
14.08.2018, 09:08
Цитата Сообщение от BrodiagaNG Посмотреть сообщение
конвертеры, которые занимаются преобразование данных модели (Model) в вид пригодный для отображения (View), должны находиться на уровне модели отображения (ViewModel)
В данном конкретном случае конвертер относится к виду, потому что модель представления не знает, что на форме отображается иконка, соответствующая расширению файла. Модель представления хранит только пути. И этого, в данном случае, ей достаточно.
Ну и кроме того, модель представления нужна для взаимосвязи вида и модели, а совсем не для преобразования модели в пригодный вид.
0
0 / 0 / 0
Регистрация: 06.08.2018
Сообщений: 22
14.08.2018, 19:33  [ТС]
Цитата Сообщение от ViterAlex Посмотреть сообщение
В данном конкретном случае конвертер относится к виду, потому что модель представления не знает, что на форме отображается иконка, соответствующая расширению файла. Модель представления хранит только пути. И этого, в данном случае, ей достаточно.
Ну и кроме того, модель представления нужна для взаимосвязи вида и модели, а совсем не для преобразования модели в пригодный вид.
Пока я писал ответ, на форуме случились технические работы, и всё пропало. Так что повторю кратко.

Решение которое ты предложил, - рабочее. Но есть один скользкий методический момент. Это не MVVM.

Вообще, насколько понял, в общем виде паттерн MVVM выглядит так:
http://3.bp.blogspot.com/-RzRc... lassic.png

Но у людей обычно получается вот так:
http://4.bp.blogspot.com/-fiw3... /mvvm2.png

Этот вариант можно условно называть "не строгий" MVVM. Что объединяет эти два немного разных подхода, - на уровне ViewModel есть свои данные, которые, как расплывчато пишут в книжках и cтатьях, "отображают собой данные из Model", а по простому это копии данных из Model.

Т.е. обязательно нужно грузить данные в ViewModel , и потом уже отдавать их View, применяя, если нужно, конвертер. Грузить напрямую во View данные, минуя ViewModel - можно, как мы это видим на примере, но это будет методически неверно с точки зрения MVVM.

Хочу отметить, что при манипуляции ListView, при запущенном приложении, постоянно идет переобращение к конвертеру, т.е. он постоянно лазиет на диск за картинками. А в рамках MVVM (хоть "строгого" хоть "не строгого") так не должно быть, см. верхнюю картинку.

Ещё раз, всё написанное не критика, вариант вполне рабочий, просто это не MVVM, а приложение WPF.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2018, 19:33
Помогаю со студенческими работами здесь

Отображение данных в ListView
Возникла проблема при создании приложения WPF. Вот окно моей проги: Здесь в ListView необходимо вывести список элементов...

DataGrid wpf отображение картинок в столбце
Доброго времени суток!! Мне необходимо отобразить динамически картинки в таблице. Все данные я считываю с xml и отображаю в таблице, но...

Entity Framework 6 и отображение картинок BitmapImage
Здравствуйте ! Только начал изучать EF 6 и столкнулся с небольшой проблемой или не понимаением, сам пока еще не понял. Есть небольшая...

[WPF] Операции с коллекцией и отображение в ListView
Предусмотреть методы работы с коллекцией: - формирования списка; - добавление элемента в начало/конец списка; - вычисления количества...

Отображение подробной информации об объекте в ListView.
Есть такое дело: ListView, в нём отображается список объектов, пусть это будет список контактов например (по сути неважно что именно), вот...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru