|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
||||||
WPF Как внедрить модель во viewModel?26.12.2024, 11:19. Показов 27483. Ответов 295
День добрый. Есть у меня метод в проекте, который вызывается из конструктора. Метод по типу "Получить все из бд и вывести на экран".
Смущает меня то, как именно я это делаю. Когда происходит загрузка, UI блокируется. Да и в целом все очень медленно и дальше будет только хуже с добавлением данных. Теперь код.
0
|
||||||
| 26.12.2024, 11:19 | |
|
Ответы с готовыми решениями:
295
Как зарегистрировать ViewModel через Autofac, создав между ViewModel и нужным View DataContext связь?
|
|
Модератор
|
||||
| 25.04.2025, 12:48 | ||||
|
Даже для разных экземпляров одного класса - это будут разные свойства. Это из общего Шарпа. Простейший конвертер. Это даже не WPF, а общий Шарп и ООП. Команда выполнится или нет - решается в её CanExecute. В нём прописана зависимость от экземпляра CreateSetViewModel, передаваемого в параметре.Так как экземпляров CreateSetViewModel может быть множество и непонятно какой из них будет передан в команду, то невозможно прокинуть обратную зависимость SaveWordCommand.RaiseCanExecuteChanged от CreateSetViewModel.HasErrors.Теперь смотри уже слой View. Здесь у нас есть представление экземпляра CreateSetViewModel в котором есть кнопка.Команда для кнопки подтягивается из другого источника. Но есть необходимость на уровне представления создать зависимость Button.IsEnabled не только от команды, но и от CreateSetViewModel.HasErrors. Соответственно мы её и создаём в Представление. Другой вариант реализации, мы внедряем в экземпляр CreateSetViewModel команду из MainVM.Это можно сделать в навигаторе. И тогда команда уже "будет знать" с каким экземпляром она работает и уже можно будет прокинуть зависимость SaveWordCommand.RaiseCanExecuteChanged от CreateSetViewModel.HasErrors.
0
|
||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|||||||||||||
| 25.04.2025, 15:54 [ТС] | |||||||||||||
CanExecute, раз уж кнопка отключается таким образом? Или лучше оставить?В общем добавил метод в реп по проверки имени на уникальность. Столкнулся с некоторыми проблемами. Прежде всего, так как реп дженерик, а у IdDto только Id параметр, я не мог сравнивать имена. Добавил это свойство в IdDto, ему все равно там место, так как Name есть у всех сущностей.Но как будто этому методу не место там, выделяется своей простотой. Пока что обращаюсь к коллекции с локальным кэшем, но что если бд не загружается сразу в кэш? Брать и проверять среди всех слов имя на уникальность? Кажется единственным вариантом.
CreateSetViewModel теперь закидываю реп и проверяю введенное значение.
0
|
|||||||||||||
|
Модератор
|
||
| 25.04.2025, 21:04 | ||
|
Ведь необязательно в представлении будет кнопка. Может быть любой ICommandSource. Я понимаю, что на первый взгляд это кажется "масло масляное". Но как более понятно объяснить - не приходит в голову.
0
|
||
|
Модератор
|
|||||||||||
| 25.04.2025, 21:04 | |||||||||||
|
Добавлено через 1 час 1 минуту
2033, вот вариант с прокидыванием команды в CreateSetViewModel:
0
|
|||||||||||
|
Модератор
|
|||||||||||||||||
| 25.04.2025, 21:18 | |||||||||||||||||
|
Если не у всех, то можете сделать производный класс и уже от него дальше плясать. Пример:
0
|
|||||||||||||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|||||||||||
| 28.04.2025, 05:49 [ТС] | |||||||||||
|
Элд Хасп, ловлю дэдлок в методе по получению всех записей из бд. Не понимаю кто кого ждет из потоков.
0
|
|||||||||||
|
Модератор
|
||||||||||||||
| 28.04.2025, 11:04 | ||||||||||||||
GetAllAsync() не вижу.Не думаю что проблема в этих фрагментах кода. Добавлено через 5 минут Делается ПОЛНАЯ ВЫГРУЗКА из бд и потом в ней ищется имя. Это ОООООчень не эффективно. Пороверка уникальности должна производится средствами БД. 1) В БД устанавливается уникальная индексация для Word.Name;2) Запрос делается так:
asynс void.Примерная логика:
0
|
||||||||||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|||
| 28.04.2025, 16:57 [ТС] | |||
|
Во втором пункте можно пожалуйста, если не сложно, по порядку. Что происходит? Метод ValidateWord внутри метода ValidateWord - это метод из репа? Если не сложно, опишите пожалуйста процесс.
0
|
|||
|
Модератор
|
||||||||||||||||||
| 28.04.2025, 18:27 | ||||||||||||||||||
|
Если IsUnique - это уникальность именно имени, то естественно подразумевается, что в БД оно тоже будет уникальным.Если же IsUnique - это какая-то разветвлённая логика по нескольким полям, то реализовываться метод должен уже не в абстрактном, а в конкретном репозитории:
Во втором случае в БД может не быть индексации, но с очень высокой вероятностью, она может помочь. Даже если нет индексации, выполнение запроса через БД, без полной выгрузке всё равно будет многократно быстрее. Добавлено через 9 минут Поэтому обычно это бывают async void методы:
Обычно даже такие зависимости выносят в отдельный метод. В данном случае в метод OnPropertyChanged. Свойство содержит только логику по работе со своим полем.
0
|
||||||||||||||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|||||||||||||||||||||||||||||||
| 29.04.2025, 04:24 [ТС] | |||||||||||||||||||||||||||||||
|
Элд Хасп, я так полагаю тут должно быть Task.Run. А почему не просто await?
Весь измененный код. Кликните здесь для просмотра всего текста
Из этого класса при попытке загрузить бд в контекст
0
|
|||||||||||||||||||||||||||||||
|
Модератор
|
||||||||||||||
| 29.04.2025, 11:48 | ||||||||||||||
model.ValidateWord(word) синхронный, то нужно вызывать его в задаче, чтобы выполнение было асинхронным.Если используется один DbContext для всех операций, то надо его лочить перед обращением к нему. Добавлено через 3 минуты
2033, но когда два репа на одном DbContext придётся ещё и локер передавать кроме самого DbContext. Добавлено через 29 секунд Так же можно попробовать использовать асинхронные методы DbContext Добавлено через 3 минуты Асинхронный запрос и сохранение Добавлено через 3 минуты Вот здесь два ответа прочитайте: https://stackoverflow.com/a/20995146/13349759
0
|
||||||||||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|
| 30.04.2025, 04:14 [ТС] | |
|
Элд Хасп, появилось это все после добавления этой валидации. Наверное там что-то типа такого: инициализируется бд и сразу же при старте приложения идет попытка валидировать свойство
Word, отсюда и два обращения к DbContext. Мне же в принципе нужно только узнать есть ли слово в бд, могу ли я через единоразовый контекст делать это?Добавлено через 1 минуту Элд Хасп, только теперь я почему-то проект запустить не могу, нажимаю запустить отладку, сразу же останавливает, чего уже только не попробовал. Другие проекты запускает, а тут даже в app не заходит.https://disk.yandex.ru/i/VjOdZuKfaCuGsg Предположительно могу грешить на замену процессора, вчера обновил.
0
|
|
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|
| 30.04.2025, 04:56 [ТС] | |
|
0
|
|
|
Модератор
|
|||||||
| 01.05.2025, 23:27 | |||||||
0
|
|||||||
|
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
|
|
| 07.05.2025, 17:03 [ТС] | |
|
Элд Хасп, день добрый. Правильно ли я понимаю, что в saferep проекте, когда идет привязка к наблюдаемой коллекции, та содержит в себе по сути ссылку на другую коллекцию?
На 25 строке коллекция инициализируется и больше никак сама не обновляется. К свойству на 67 строке уже идет привязка к этой коллекции во View.Добавлено через 54 секунды Имею ввиду нет никакого добавления в коллекцию эту в событии.
0
|
|
|
Модератор
|
|||||||
| 07.05.2025, 21:15 | |||||||
privateBirds: инициализация, добавление, удаление и прочее.
0
|
|||||||
| 07.05.2025, 21:15 | |
|
Mvvm ViewModel в ViewModel Как внедрить БД в exe на VB 6.0 Как внедрить функцию как с внедрить свой код
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|