Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
 Аватар для siriusED
32 / 31 / 13
Регистрация: 20.05.2010
Сообщений: 705
WPF

MVVM, ObservableCollection не обновляет View

31.03.2024, 22:39. Показов 1825. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привт, есть коллекция итемом меню

C#
1
        public ObservableCollection<MenuitemModel> MainMenuItems { get; set; }
В конструкторе заполняю ее меню итемами
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
MainMenuItems = new ObservableCollection<MenuitemModel>()
{
    new()
    {
        Header = "File", Command = MainMenuItemClickCommand, Code = MainMenuCode.File
    },
    new()
    {
        Header = "Edit", Command = MainMenuItemClickCommand, Code = MainMenuCode.Edit
    },
    new()
    {
        Header = "Language", Command = MainMenuItemClickCommand, Code = MainMenuCode.Language
    },
}
Ну и теперь если я в коде меняю например вот так:

C#
1
2
MainMenuItems[2].Header = "Changed"; // Меняю титул пункта меню
OnPropertyChanged(new PropertyChangedEventArgs(nameof(MainMenuItems))); // Оповещаю View что коллекция поменялась
То все итемы меню как были так и остались все хедеры не меняются во обще, почему так? Это проблема коллекции или в чем может быть проблема?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.03.2024, 22:39
Ответы с готовыми решениями:

ObservableCollection не обновляет UI после изменения свойств элемента коллекции
Всем привет! Подмогните пожалуйста с проблемкой... Есть свойство в VM окна public ObservableCollection&lt;WorkDrawData&gt; Works {...

WPF. MVVM. ObservableCollection не изменяет значения
У меня есть ObservableCollection, которые привязан в View &lt;ListView Grid.Row=&quot;1&quot; ...

MVVM. Не обновляется DataGrid после изменения ObservableCollection
Доброго времени суток. WPF в принципе увидел 3 недели назад. Сходу нырнул с головой в.. MVVM и Prism. Опыта в программировании в...

35
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
03.04.2024, 13:18
Студворк — интернет-сервис помощи студентам
Элд Хасп, ну Ок. Для некоего "общего" случая не скажу, но в абсолютном большинстве проектов, которые делать приходилось именно мне, использование авто-свойств сводилось к минимуму, т.к., как правило, в своих моделях эти свойства устанавливаются только "внутри", т.е. private set. Плюс к этому, многие свойства в добавок обладают некоторой доп. логикой, например, установить другое свойство, зависящее от этого...
Может возникнуть ситуация, что внедрение в "это все" функционала Fody окажется уже не совсем "мало-кодовым" вариантом, и в таком случае все же уместнее будет самому реализовать INPC со всеми необходимыми перегрузками.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
03.04.2024, 13:41
Цитата Сообщение от wizard41 Посмотреть сообщение
т.к., как правило, в своих моделях эти свойства устанавливаются только "внутри", т.е. private set
Можно задать приватный сеттер автосвойству - это не является припятсвием.

Цитата Сообщение от wizard41 Посмотреть сообщение
Плюс к этому, многие свойства в добавок обладают некоторой доп. логикой, например, установить другое свойство, зависящее от этого...
А вот это плохо.

Лучше вынести создание зависимостей в отдельный метод.
Например, в моей реализации Простые реализации для тем на форуме это метод OnPropertyChanged. Во всех фреймворках (в том числе в PropertyChanged.Fody) есть аналогичные методы. В Fody? вроде, ещё были какие-то атрибуты для методов зависящих от свойств. Можно их использовать. Но только не тело свойства вписывать создание зависимостей.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3463 / 2784 / 575
Регистрация: 04.09.2018
Сообщений: 8,757
Записей в блоге: 3
03.04.2024, 13:48
Элд Хасп, да, это просто "мысли в слух". Все еще очень зависит от самой задачи: если у тебя два-три класса и достаточно много собственной логики взаимодействия между ними, то встраивание Fody может оказаться каплей в море, т.е. особой выгоды не принесет. Пару десятков строк самописной реализации INPC погоды не сделают вообще.
Другое дело 50 классов и 2000 свойств, вот тут уже да, кое-что сократится.
1
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578
17.04.2024, 12:05
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Или чуть более сложные в реализации, но упрощающие применение отсюда: https://github.com/INexteR/NewTrade... ViewModels
Какие логины-пароли для разных ролей?

Какая степень правильности выполнения проекта по 5-ти бальной системе?
Если условно...
Я понимаю, что, если каждый будет смотреть проект, то у каждого будут свои замечания различной степени тяжести..
Интересует ваш взгляд...
Шкала:
- 1 - проект выполнен неправильно;
- 5 - проект выполнен идеально;
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.04.2024, 15:21
Цитата Сообщение от dev3214 Посмотреть сообщение
Какая степень правильности выполнения проекта по 5-ти бальной системе?
Какого?
Того на который я ссылку GitHub дал?
1
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578
17.04.2024, 15:37
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Какого?
Того на который я ссылку GitHub дал?
Да.

Из сообщения мне показалось, что вы хорошо знакомы с проектом..

Ваша ссылка: https://github.com/INexteR/New... ViewModels
Полный проект: https://github.com/INexteR/NewTrade
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
17.04.2024, 16:07
Цитата Сообщение от dev3214 Посмотреть сообщение
Из сообщения мне показалось, что вы хорошо знакомы с проектом..
Да. Но это в прошлом.
Много времени утекло - уже много не помню.
Проект делался, насколько помню, с целью демонстрации разделения функционала по слоям, для чего использовалась реализация каждого слоя в отдельном проекте.
Что касается самой логики, то на неё особого внимания не обращалось. Поэтому огрехов будет много.

Само обсуждение Решения во время его создания, должно быть здесь в разделе в какой-то теме.
Надо поискать.

Добавлено через 3 минуты
Посмотрите среди тем созданных INexteR
1
0 / 0 / 0
Регистрация: 23.07.2019
Сообщений: 19
13.05.2024, 14:15
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для извещения об изменении свойства должна быть реализация интерфейса INotifyPropertyChanged в элементе коллекции, в вашем случае
Что делать в случае, если элемент коллекции ObservableCollection реализует INPC, свойства этого элемента используют INPC, а обновления DataGrid во View всё равно не происходит?..

Вообще в принципе как организовать вывод данных в табличном виде с обновлением View (при изменении свойств элемента коллекции)?
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
13.05.2024, 14:21
melisey, указать двухстороннюю привязку и UpdateSourceTrigger
XML
1
Text="{Binding Path= Data, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
А вообще покать хотя бы код для начала. Без примера кода на какой ответ вы рассчитываете?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
13.05.2024, 14:21
Цитата Сообщение от melisey Посмотреть сообщение
а обновления DataGrid во View всё равно не происходит?..
Надо дебажить.
Где-то что-то напутано.

Закиньте решение (минимальный воспроизводимы пример) на GitHub и дайте ссылку.

По моему опыту разбора подобных ошибок их топ: неверная реализация INPC и путаница в экземплярах VM.
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,757
Записей в блоге: 4
13.05.2024, 14:22
Цитата Сообщение от xellan24rus Посмотреть сообщение
Text="{Binding Path= Data, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Цитата Сообщение от melisey Посмотреть сообщение
а обновления DataGrid во View всё равно не происходит
???
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
13.05.2024, 14:23
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
???
Как я понял автор из кода пытается менять значение, а во view ничего не меняется. На основе этого варианта и прикрепил часть кода
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
13.05.2024, 14:25
Цитата Сообщение от xellan24rus Посмотреть сообщение
а во view ничего не меняется. На основе этого варианта и прикрепил часть кода
Mode=TwoWay было бы актуально, если наоборот из View в VM значения не передавались.
А здесь противоположная ситуация.
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,757
Записей в блоге: 4
13.05.2024, 14:28
Цитата Сообщение от xellan24rus Посмотреть сообщение
Mode=TwoWay
Это режим привязки по умолчанию для объектов похожих на TetxtBox.
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
UpdateSourceTrigger=PropertyChanged
Это позволяет отображать изменённое значение во время ввода.
Не знаю как оно ТС поможет...
0
 Аватар для xellan24rus
364 / 296 / 55
Регистрация: 08.04.2020
Сообщений: 1,175
13.05.2024, 14:43
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А здесь противоположная ситуация.
Тогда
OneWay
должно быть актуально.
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Не знаю как оно ТС поможет...
Пока что даже кода нет, сейчас остается только гадать что поможет
0
0 / 0 / 0
Регистрация: 23.07.2019
Сообщений: 19
13.05.2024, 14:52
Цитата Сообщение от xellan24rus Посмотреть сообщение
А вообще покать хотя бы код для начала. Без примера кода на какой ответ вы рассчитываете?
xellan24rus , Элд Хасп, Andrey-MSK в ближайшее время создам воспроизводимый пример и закину его на GitHub. Спасибо за отклики.

Не хотел плодить ещё одну тему, но похоже придётся
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.05.2024, 14:52

MVVM как при заполнении (изменении) коллекции ObservableCollection избежать копий
Есть ObservableCollection в которой хранится класс с полем Name. Надо чтоб при попытке задать имя элемента которое уже встречается в...

MVVM Отображение в view
Добрый день. 1. Не подскажите как сделать так чтобы при изменениях в поле 1(combobox) изменялось то что находиться к примеру в textbox...

MVVM Что относится к View?
Привет , почитал о mvvm и немного не понял , к viev относятся все userControl(ы) ? тойсь можно смело создавать папку Viev и...

MVVM и открытие другого View
Как можно архитектурно правильно открыть другой View? И передать, например, параметры. У меня есть Окно Главное, где происходят основные...

MVVM биндинг view в model
Я новичок, пытаюсь написать приложение UWP согласно паттерну MVVM В общем, в модели должен быть список экземпляров класса. В классе...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru