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

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

26.12.2024, 11:19. Показов 25495. Ответов 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
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 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
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 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
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 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
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 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
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 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
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 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
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
28.12.2024, 14:02
Цитата Сообщение от Vissmuy Посмотреть сообщение
Как узнать?
Проще всего в Студии в свойствах проекта .
Судя по этому скрину - .Net8.
Тогда тип DateOnly должен быть. Возможно, не хватает какого-то юсинга.


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

Добавлено через 49 секунд
Цитата Сообщение от Vissmuy Посмотреть сообщение
Проект ужатый
Это просто набор ничем не связанных файлов, а никак не проект...
0
 Аватар для Andrey-MSK
3390 / 2276 / 388
Регистрация: 14.08.2018
Сообщений: 7,697
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
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. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru