Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
WPF

ComboBox внутри ListView

22.11.2021, 12:06. Показов 1687. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа здравствуйте. Помогите пожалуйста решить мою проблему.
Если не сложно объясните пожалуйста как обратиться к контролу ComboBox который внутри ListView

Что имею.
XAML код:
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
30
31
32
33
34
<Window x:Class="LodgerBBP.RoomTable"
              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             Title="ПРОГРАММА"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:LodgerBBP"
              mc:Ignorable="d" Height="693.5" Width="597.333">
    <Grid Margin="0,0,2,0">
        <ListView x:Name="c_LV" Margin="0,0,0,220">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Помещение" DisplayMemberBinding="{Binding Name}" Width="200"/>
                    <GridViewColumn Header="S (с коэф)" DisplayMemberBinding="{Binding Area}" Width="130"/>
                    <GridViewColumn Header="Площадь" DisplayMemberBinding="{Binding ExactArea}"/>
                    <GridViewColumn Header="Тип помещения" Width="150">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox Name="cbTypeRoom" 
                                          ItemsSource="{Binding TypeRoom, FallbackValue=1}"
                                          SelectedItem="{Binding SelectedPriority}"
                                          xmlns:sys="clr-namespace:System;assembly=mscorlib"
                                          Width="120" >
                                    <!--<sys:String>Без коэф.</sys:String>
                                    <sys:String>Балкон ^0.3</sys:String>
                                    <sys:String>Лоджия ^0.5</sys:String>-->
                                </ComboBox>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>
                </GridView>
            </ListView.View>
        </ListView>
</Grid>
Что имею в коде
Заполняем наш ListView
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
void @void() {
 c_LV.Items.Add(new RoomValue                                    
   {
           Name = "комната 1",
           Area = 0.1d,
           ExactArea = 0.1d,
           TypeRoom = new RoomValue().TypeRoom
                    });
}
 
 public class RoomValue
    {
        public string Name { get; set; }
        public double Area { get; set; }
        public double ExactArea { get; set; }
        public string[] TypeRoom { get; set; } = new string[] {"Без коэф.", "Балкон ^0.3", "Лоджия ^0.5"};
        public object SelectedPriority { get; set; }
    }

Вот что я пытаюсь получить.
Изменив значение в ComboBox изменить значение во второй ячейке в той же строке.

C#
1
2
3
4
5
6
7
8
9
10
 void TestSum(ListView lv)
        {
            foreach (dynamic item in lv.Items)
            {
                var SelectedComboBox = (item.SelectedPriority as ComboBox);
 
                MessageBox.Show(SelectedComboBox.SelectedIndex.ToString());
//Но тут мне говорят что ссылка на объект не указывает на экземпляр что логично, но не понятно как обратиться
            }
        }


Уже и мануалы почитал, и похожие проблемы пытался интегрировать. Но что то я не понимаю как этого сделать.

Не по теме:

Как же трудно учить MVVM после долгого сотрудничества на WinForms

0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2021, 12:06
Ответы с готовыми решениями:

Как обновить TextBlock внутри ListView?
Проблема следующая. У меня есть ListView в котором находится TextBlock. В TextBlock подгружаются данные из БД (SQL). При редактировании...

считать данные из контролов внутри ListView
всем доброго времени суток. Подскажите пожалуйста, как можно считать данные из комбобоксов, которые находятся внутри ListView? Код ...

ListView содержащий TextBox и ComboBox. Как реализовать?
Добрый вечер. Подскажите пожалуйста как реализовать список с двумя колонками, в которых буду в одной ComboBox а в другой TextBox?

3
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
22.11.2021, 13:18
Лучший ответ Сообщение было отмечено anomal6 как решение

Решение

Цитата Сообщение от anomal6 Посмотреть сообщение
Уже и мануалы почитал, и похожие проблемы пытался интегрировать.
Чё-то вы не то читали, или не так поняли.

Самое первое, ломающее всю архитектуру, это c_LV.Items.Add.
Вам нужно создать коллекцию ObservableCollection<RoomValue> в поле только для чтения:
C#
1
        private readonly ObservableCollection<RoomValue> rooms = new();
В конструкторе Окна присвоить ссылку на это поле после инициализации XAML:
C#
1
2
        InitializeComponent();
        c_LV.ItemsSource = rooms:
После этого вы работает с коллекцией rooms.
Её изменения будут автоматически отображаться в Окне.

Второе, мутабельные свойства служащие для привязки (то есть все свойства RoomValue) должны ОБЯЗАТЕЛЬНО уведомлять о своём изменении через INPC.
В противном случае их представление в GUI не будет обновляться.

Третье, после задания источника коллекции, свойство SelectedItem будет содержать элемент коллекции, то есть RoomValue, а не UI элемент ComboBox.
Получив RoomValue изменяете у него те свойства, которые считаете нужным.

Цитата Сообщение от anomal6 Посмотреть сообщение
Как же трудно учить MVVM после долгого сотрудничества на WinForms
Ну, думаю проблема больше в низком уровне знаний.
Очень сомневаюсь, что вы в Формах создавали правильные ООП Решения.
Посмотрите тему от Storm23: Создание программы - ООП модель, MVP
Вы таким образом реализовывали свои Решения?
Если да, то переход к WPF+MVVM для вас никаких проблем представлять не будет.

Чтобы не повторяться цитата:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Программисту не знающему ООП, работающему приёмами процедурного программирования в Code Behind Форм, действительно, трудно работать в WPF.
Часто даже понять саму концепцию WPF не в состоянии.
Основной язык WPF - это XAML.
Шарп носит вспомогательную функцию по пополнению используемых WPF типов (Custom Control, конвертеры, прокси, вспомогательные типы, селекторы шаблонов, Behavior, DP и AP свойства, Контекст Данных и др.).
Но на Шарпе они только создаются, а используются в XAML.
В типовом WPF Решении CodeBehind всех элементов должен оставаться пустым.
Прочитайте ещё тему "WPF vs WinForms (для начинающих)" по ссылке в подписи моего поста.
1
95 / 62 / 22
Регистрация: 11.03.2013
Сообщений: 608
Записей в блоге: 7
22.11.2021, 14:54  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Прочитайте ещё тему "WPF vs WinForms (для начинающих)" по ссылке в подписи моего поста
Спасибо.
У Storm23 всегда перечитываю его статьи. И стараюсь придерживаться правильной модели.
WPF совершенно с другой стороны открывается.

По Вашим рекомендациям всё получилось и всё работает.

Реализовался от интерфейса INotifyPropertyChanged чтобы изменения были видны в UI
И работаю с коллекцией, и да так действительно проще и удобнее.

Ещё раз спасибо
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16115 / 11236 / 2887
Регистрация: 21.04.2018
Сообщений: 33,036
Записей в блоге: 2
22.11.2021, 14:57
Цитата Сообщение от anomal6 Посмотреть сообщение
Реализовался от интерфейса INotifyPropertyChanged чтобы изменения были видны в UI
И работаю с коллекцией, и да так действительно проще и удобнее.
Сделайте ещё один шаг - реализуйте полноценный MVVM и очистите Code Behind.
Станет ещё проще и удобнее.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2021, 14:57
Помогаю со студенческими работами здесь

treeview внутри combobox
Помогите разобраться почему treeview не отображается в combobox? public class Region { public string Name { get; set;...

Доступ к Label внутри ListView
И снова здравствуйте! Подскажите новичку как мне получить доступ к элементу Label, который внутри listview &lt;asp:ListView...

ASP.NET DropDownList внутри ListView
Всем привет! Использую для вывода информации о продуктах и её редактирования ListView. Он связан с моделью. В режиме редактирования нужно...

Изменение свойств ListView с использованием ComboBox
Есть такая ситуация. К примеру на форме размещены ListView, ComboBox и Button. Далее в ComboBox выбираем вид отображения ListView и по...

В ListView вставить ProgressBar или ComboBox
Подскажите пожалуиста каким образом можно в ListView вставить ProgressBar или comboBox. А то я никак непойму.


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru