|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||||||
WPF Как внедрить модель во viewModel?26.12.2024, 11:19. Показов 25488. Ответов 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 Как внедрить функцию как с внедрить свой код
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет:
1. Использовать системное время и дату,
2. Есть возможность вводить время и дату вручную.
3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
|
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber.
Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|