|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||||||
WPF Как внедрить модель во viewModel?26.12.2024, 11:19. Показов 26932. Ответов 295
День добрый. Есть у меня метод в проекте, который вызывается из конструктора. Метод по типу "Получить все из бд и вывести на экран".
Смущает меня то, как именно я это делаю. Когда происходит загрузка, UI блокируется. Да и в целом все очень медленно и дальше будет только хуже с добавлением данных. Теперь код.
0
|
||||||
| 26.12.2024, 11:19 | |
|
Ответы с готовыми решениями:
295
Как зарегистрировать ViewModel через Autofac, создав между ViewModel и нужным View DataContext связь?
|
|
Модератор
|
||||||||||||||
| 22.04.2025, 16:53 | ||||||||||||||
protected.Например:
Он же подымается для любого изменения валидации. Вот в него и нужно перед поднятием события добавить HasErrors = _propertyerrors.Count > 0;.
0
|
||||||||||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|||||||||||
| 23.04.2025, 13:13 [ТС] | |||||||||||
|
Элд Хасп, по изменениям.
Методы AddError, RaiseErrorsChanged, ClearErrors теперь protected.Пришлось видоизменить базовый метод GetErrors, так как почти ничего не меняя сегодня он стал выкидывать исключения, хотя вчера все работало. Исключение на propertyName - оно либо empty, либо null.Теперь метод выглядит так.
OnPropertyChanged.У вас там в комментариях было указано, что лучше сперва вызывать базовый метод.
Добавлено через 7 минут Уже вижу, что пустое имя свойства тоже нужно обрабатывать. Интересно почему HashSet, у меня вот лист под ошибки. И вложенный цикл - разве это норм? Или расчет на то, что ошибок много не бывает и все будет быстро?
0
|
|||||||||||
|
Модератор
|
|||||||||||
| 23.04.2025, 18:22 | |||||||||||
|
Если имя свойства пустое, то нужно вывести ошибки по всем свойствам. Что может быть оптимальнее двойного цикла для этой задачи? Расчёт на то, что должны быть возвращены все ошибки по всем свойствам. Добавлено через 33 минуты
0
|
|||||||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||||||||||||
| 24.04.2025, 10:26 [ТС] | ||||||||||||
|
Добавлено через 1 минуту
CanExecute команды и в этой же VM переопределен метод OnPropertyChanged. Но в него не заходит.
0
|
||||||||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||
| 24.04.2025, 10:51 [ТС] | ||
|
Команда в MainVM находится. И еще, изменив метод GetErrors на тот, что вы скинули начали происходить какие-то странности. Я добавляю ошибку только по текст боксу Word, остальное все само обводится. Надо будет потом обводку красную заменить на вот тот крестик. Он мне больше нравится.
0
|
||
|
Модератор
|
||
| 24.04.2025, 11:16 | ||
|
В основном, это когда идёт привязка DataContext. Сейчас нет времени посмотреть, но скорее всего у вас идёт привязка Content к экземпляру Word, Word попадает в DataContext элементов созданных шаблоном данных и это и вызывает запрос общей валидаци. Добавлено через 1 минуту Попробуйте в биндинге Content задать ValidatesOnDataErrors=false
0
|
||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|||||||
| 24.04.2025, 11:45 [ТС] | |||||||
0
|
|||||||
|
Модератор
|
||
| 24.04.2025, 13:50 | ||
|
Помню, что сталкивался с такой проблемой и как-то её решал. Но вот не помню как. Смогу только вечером посмотреть. Если можете глянуть, то посмотрите это обводка вокруг ContentControl или вокруг главного элемента шаблона контента?Если разберётесь, то задайте ему пустой шаблон валидации в Validation.ErrorTemplate.
0
|
||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|||||||
| 24.04.2025, 15:05 [ТС] | |||||||
ContentCotrol.
0
|
|||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|||||||
| 24.04.2025, 17:23 [ТС] | |||||||
Элд Хасп, потыкав в отладчике слишком часто заходит в GetErrors, по несколько раз для одного свойства + куча раз для пустого свойства и каждый раз возвращается одна и та же ошибка, которую я добавил для свойства Word. Уж не знаю должно ли так быть.
0
|
|||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||
| 25.04.2025, 02:36 [ТС] | ||
|
0
|
||
|
Модератор
|
||
| 25.04.2025, 07:38 | ||
|
Допустим, вы реализовали в ViewModel INDEI без вывода общей ошибки. Отдали эту реализацию дальше в разработку View. Там вывод общей ошибки не был нужен они приняли эту реализацию. Но потом решили всё же вывести для пользователя список ошибок почему он не может кликнуть по кнопке. Обращаются для этого к выводу общей валидации, а там бац и отказывается, что его нет. Дают задание на доработку. Прислали им новую реализацию. Приложение начали эксплуатировать. И оказалось пользователям и так понятно почему кликать нельзя, и вывод ошибок перегружает GUI. Меняют View и дают новое задание на уровень VM - убрать общие ошибки. Какой вывод из этого примера? мы получили явную зависимость VM от хотелок View. А весь смысл архитектурных паттернов (в том числе MVVM), в том чтобы не было таких зависимостей. В данном случае этого можно добиться только полной реализацией INDEI. Нужно использовать или нет общий вывод ошибок View - это уже задача тех кто разрабатывает View. Тем более что это ещё зависит и от значений по умолчанию. Сейчас у ValidatesOnNotifyDataErrors значение по умолчанию True. Но насколько помню, раньше во Framework значение по умолчанию было False и там где был нужен вывод валидации всегда нужно было явно ставить ValidatesOnNotifyDataErrors=True.
0
|
||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||||||
| 25.04.2025, 08:34 [ТС] | ||||||
|
Элд Хасп, теперь понятно.
Вы по кнопке не смотрели, почему CanExecuteChanged не поднимается?Добавлено через 9 минут Элд Хасп, как я понял в if мне нужно будет поместить метод по определению уникальности слова. Но как сделать ожидание в этот момент? Типа значок загрузки на случай, если все долго.
0
|
||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|
| 25.04.2025, 08:55 [ТС] | |
|
Элд Хасп, а должен ли реп находится в библиотеке? Разве это не относится к модели? Делал как у вас в птицах.
0
|
|
|
Модератор
|
|||||||||
| 25.04.2025, 09:13 | |||||||||
|
Но реализуют его по разному. Иногда это отдельная сборка. В таком случае, можно заменять в модели репозитории разных реализаций без перекомпиляции модели. Например, перейти с SQLite на MySQL. В других случаях сборка модели включает в себя репозиторий, так даже в теории в будущем не может возникнуть задачи по его замене. Строгих правил нет. Надо определяться от ТЗ на разработку. Но опытные разработчики обычно всегда реализуют репозиторий в отдельной сборке, даже если в этом нет явной необходимости "здесь и сейчас". Добавлено через 8 минут А меняете вы CreateSetViewModel.HasErrors. Для синхронного кода достаточно:
Добавлено через 1 минуту Один из вариантов - это привязка Button.IsEnabled к CreateSetViewModel.HasErrors. Добавлено через 3 минуты Вечером или завтра. В общих словах - нужно создавать состояния валидации разных типов. На состояние "валидация в процессе" - один шаблон ошибки, на состояние "ошибка валидации" - другой шаблон ошибки.
0
|
|||||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||
| 25.04.2025, 09:49 [ТС] | ||
|
0
|
||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||
| 25.04.2025, 10:02 [ТС] | ||
IsEnabled к противоположенному значению HasErrors не выходит.Добавлено через 7 минут Элд Хасп, получается какое-то разделение логики кнопок. Где-то команды решают, можно ли нажать кнопку, а где-то кнопка сама отключается.
0
|
||
| 25.04.2025, 10:02 | |
|
Mvvm ViewModel в ViewModel Как внедрить БД в exe на VB 6.0 Как внедрить функцию как с внедрить свой код
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
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, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|