Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
WPF

Как внедрить модель во viewModel?

26.12.2024, 11:19. Показов 27480. Ответов 295
Метки mvvm (Все метки)

Студворк — интернет-сервис помощи студентам
День добрый. Есть у меня метод в проекте, который вызывается из конструктора. Метод по типу "Получить все из бд и вывести на экран".

Смущает меня то, как именно я это делаю. Когда происходит загрузка, UI блокируется. Да и в целом все очень медленно и дальше будет только хуже с добавлением данных.

Теперь код.

C#
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
public class BirdsViewModel : ObservableObject
{
    // [B]Конструктор[/B]
    public BirdsViewModel(IBirdRepository birdRepository, Func<BirdEntity, BirdViewModel> birdView) // [B]Прошу обратить 
//внимание на делегат. Его, думаю, и нужно заменять.[/B]
 
    {
        Birds = [];
        _birdView = birdView;
        _birdRepository = birdRepository;
        LoadBirds();
    }
 
// [B]Проблемный метод[/B]
private async void LoadBirds()
{
    var birds = await _birdRepository.GetAllAsync(); // [B]Получение данных из БД[/B]
    switch (Name)
    {
        default:
            foreach (var bird in birds)
                Birds.Add(_birdView(bird)); // [B]С помощью делегата я во ViewModel передаю Entity, 
//с которой та и работает. Есть ли другие методы подобной реализации, чтобы у каждой ViewModel был свой Entity?[/B]
            break;
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.12.2024, 11:19
Ответы с готовыми решениями:

Как из ViewModel UserControl'a изменить свойство в ViewModel главного окна?
Недавно начал попытки создавать приложение WPF с применением MVVM, и у меня возник вопрос, который не даёт мне продвигаться в разработке...

Как зарегистрировать ViewModel через Autofac, создав между ViewModel и нужным View DataContext связь?
Доброго времени суток. Есть желание при регистрации ViewModel'и сразу же &quot;подключиться&quot; к DataContext'у у нужной View, как например: ...

WPF получить доступ из одной viewmodel к другой viewmodel
Собственно есть у меня две viewmodel, mainviewmodel и settingsviewmodel, в mainviewmodel есть вот такая штука private Visibility...

295
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 11:14  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
По контексту данных предка:
Вот это не фурычит
XML
1
<Text="{Binding DataContex.Departure, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>
Также попробовал заменить Window на BirdsViewModel, результата нет.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 11:18  [ТС]
В TextBox должна быть дата сегодняшняя.

C#
1
2
3
4
5
6
7
8
9
10
11
public string Departure
{
    get { return _departure; }
    set
    {
        _departure = value;
        OnPropertyChanged();
    }
}
 
private string _departure = DateTime.Now.ToShortDateString();
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.12.2024, 11:21
Цитата Сообщение от Vissmuy Посмотреть сообщение
Вот это не фурычит
Писал здесь. Возможно без указания режима не подхватывает:
XML
1
<Text="{Binding DataContex.Departure, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/>
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 11:23  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Binding DataContex.Departure
Вот это звучит максимально логично. У меня ведь у этого UserControl dataContext - это нужная ViewModel, там и находится нужное для привязки свойство. Странно, что такая запись не работает без всяких там RelativeSource и прочего
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.12.2024, 11:24
Цитата Сообщение от Vissmuy Посмотреть сообщение
В TextBox должна быть дата сегодняшняя.
Если Departure это дата, то надо заменить тип свойства на DateOnly (или DateTime).
Так будет проще верификацию проводить.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 11:26  [ТС]
А могу ли я этому TextBox задать DataContext в виде нужной ViewModel и просто сделать такую запись - DataContex.Departure?

Что-то типа:
XML
1
2
3
<TextBox 
         Text="{Binding DataContex.Departure}"
         DataContext="И вот сюда ViewModel подставить"/>
Добавлено через 32 секунды
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если Departure это дата
String
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.12.2024, 11:27
Цитата Сообщение от Vissmuy Посмотреть сообщение
У меня ведь у этого UserControl dataContext
Если внутри UserControl, то предка надо искать по типу вашего UserControl. У UserControl есть свой XAML. А свой XAML создаёт свою область видимости имён. И хотя в рантайм поиск предка Окна будет работать, но он не будет работать в Дизайнере. Ведь Дизайнер не знает в каком Окне или Окнах будет использован этот UserControl.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 11:29  [ТС]
Ну вообще да, это дата. Просто я записываю ее в тип String, ибо есть такая запись = DateTime.Now.ToShortDateString(), но нету такой = DateTime.Now.ToShortDate

Добавлено через 1 минуту
Цитата Сообщение от Vissmuy Посмотреть сообщение
ибо есть такая запись = DateTime.Now.ToShortDateString(), но нету такой = DateTime.Now.ToShortDate
Таким образом мне не удалось избавиться от назойливого времени, которое постоянно подставляется. Зато в формате типа DateTime.Now.ToShortDateString() время убирается
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.12.2024, 11:30
Цитата Сообщение от Vissmuy Посмотреть сообщение
А могу ли я этому TextBox задать DataContext в виде нужной ViewModel
Можно.
Но надо помнить, что это задание источника по умолчанию для ВСЕХ привязок в этом элементе. Если у вас есть ещё другие привязки, триггера, то они станут неверно работать.

Цитата Сообщение от Vissmuy Посмотреть сообщение
String
А почему там дата по умолчанию? Или это временное значение, которое может быть заменено любым текстом?

Добавлено через 56 секунд
Цитата Сообщение от Vissmuy Посмотреть сообщение
Таким образом мне не удалось избавиться от назойливого времени, которое постоянно подставляется. Зато в формате типа DateTime.Now.ToShortDateString() время убирается
Используйте тип DataOnly.
Так же можете использовать StringFormat в привязках.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 11:34  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
для ВСЕХ привязок в этом элементе.
Ну так мне этот TextBox только к ViewModel и подвязывать

Цитата Сообщение от Элд Хасп Посмотреть сообщение
А почему там дата по умолчанию? Или это временное значение, которое может быть заменено любым текстом?
Потому что должна быть дата, DateOnly тоже там зачем-то время показывает, я тестировал в консольном приложении, пытался время отсеять
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.12.2024, 11:51
Цитата Сообщение от Vissmuy Посмотреть сообщение
должна быть дата, DateOnly тоже там зачем-то время показывает
Странно.
Сейчас сам не могу проверить.
Укажите тогда StringFormat
XML
1
<TextBox Text="{Binding DataContex.Departure, StringFormat=dd.MM.yyyy
Или любой другой.

Добавлено через 1 минуту
И вместо TextBox лучше использовать календарь.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 11:53  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Укажите тогда StringFormat
Хорошо, я это попробую. Пока я не могу разобраться с привязкой. Если я все лишнее уберу и скину вам, вы сможете показать, как вы рекомендовали вот тут?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
По контексту данных предка:
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 11:56  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
DateOnly тоже там зачем-то время показывает
Хотя я щас попробовал, я не могу использовать DateOnly
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.12.2024, 12:08
Цитата Сообщение от Vissmuy Посмотреть сообщение
я не могу использовать DateOnly
Платформа проекта какая? Нужна .Net 6 или выше.
DateOnly | Применяется к

Цитата Сообщение от Vissmuy Посмотреть сообщение
Если я все лишнее уберу и скину вам, вы сможете показать, как вы рекомендовали вот тут?
Лучше скиньте Решение (желательно упрощённое по максимуму) на GitHub. Так проще будут взаимодействовать.
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 13:59  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Платформа проекта какая?
Как узнать?
Вот здесь это указано?


Цитата Сообщение от Элд Хасп Посмотреть сообщение
Лучше скиньте Решение
https://github.com/Londongrad/TestProject
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
28.12.2024, 14:02
Цитата Сообщение от Vissmuy Посмотреть сообщение
Как узнать?
Проще всего в Студии в свойствах проекта .
Судя по этому скрину - .Net8.
Тогда тип DateOnly должен быть. Возможно, не хватает какого-то юсинга.


Репозиторий постараюсь вечером посмотреть.
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,763
Записей в блоге: 4
28.12.2024, 14:15
Vissmuy, А что за каталог wwwroot???

Добавлено через 5 минут
Vissmuy, А где реализация всех команд из привязок?

Добавлено через 3 минуты
Vissmuy, Где реализация всех свойств из привязок?
0
 Аватар для 2033
4 / 4 / 1
Регистрация: 26.12.2024
Сообщений: 225
28.12.2024, 14:19  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А что за каталог wwwroot???
Там картинки и прочее, чувак кидал мне свой проект в пример, я у него взял это

Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А где реализация всех команд из привязок?
Проект ужатый, чтобы только нужное увидеть, если интересно, могу целиком залить в другой репозиторий
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,763
Записей в блоге: 4
28.12.2024, 14:30
Цитата Сообщение от Vissmuy Посмотреть сообщение
Проект ужатый
Он в студии кучу ошибок даст, даже если его просто в ней открыть...
Цитата Сообщение от Vissmuy Посмотреть сообщение
могу целиком залить в другой репозиторий
Только создавать репозиторий через Git в студии, а не пихать туда всё подряд, включая obj, bin и т.д.

Добавлено через 49 секунд
Цитата Сообщение от Vissmuy Посмотреть сообщение
Проект ужатый
Это просто набор ничем не связанных файлов, а никак не проект...
0
 Аватар для Andrey-MSK
3397 / 2283 / 388
Регистрация: 14.08.2018
Сообщений: 7,763
Записей в блоге: 4
28.12.2024, 14:32
Vissmuy, И проект MVVM выглядит примерно вот так
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.12.2024, 14:32

Mvvm ViewModel в ViewModel
Есть одно окошко там много вкладок, в каждой вкладке есть подвкладки и там много разных таблиц и кнопок. ViewModel будет просто огромной,...

Как внедрить БД в exe на VB 6.0
Hi! Есть база на Access 7.0 и проект на VB 6.0. Можно ли как-нибудь всунуть .mdb файл в exe-шник, чтобы никто не мог его открыть и...

Как внедрить функцию
Здравствуйте, есть программа которая считает в edit сколько открывающихся скобок и закрывающихся. мой код выглядит так: procedure...

как с внедрить свой код
Всем привет! Не подскажите как можно создать свою папку в вордпресссом и внедрить свой код. Сейчас есть сайт на вордпресс, там нужно...

Как внедрить ProgressBar в макрос
Добрый день! почитал соседние темки на эту тему, нашел у товарища analyst архив с замечательными формами ProgressBar но так как...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru