Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554

Где лучше в MVVM реализовать дополнительную логику?

25.09.2025, 19:46. Показов 8787. Ответов 118
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
 Комментарий модератора 
Тема создана разделением темы Привязка DP-свойства UserControl к вложенному элементу


Цитата Сообщение от Элд Хасп Посмотреть сообщение
проблема безопасности, когда свойство Result может быть перезадано по месту использования DPCalculatorUC, осталось.
так оно (заданный Result) ведь всегда может быть перезадано? или я ошибаюсь... переназначить свойство - это же не удалить/создать объект заново...

мне почему-то кажется, что это не проблема, а как раз и задумано было, чтобы можно было переназначать свойства в зависимости от нужного (например, цвет текста при value>1000, условно говоря) - вот и вынесли это DP в отдельный класс... а за пример реализации и использования в XAML - спасибо!..

? только в каких случаях это DP подключают обычно?.. как по мне, так Styles и Templates и даже Converters - нормальные внутренние (для объекта) свойства, дальше которых уже и придумать нечего (с практической точки зрения) чтобы захотеть подключать из-вне класса ещё и DP за гранью всего, что можно задать и в объекте...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2025, 19:46
Ответы с готовыми решениями:

Где располагать логику приложения, когда используем паттерн mvvm?
Изучаю wpf и паттерн mvvm. Никогда не задумывался, где что располагать, я считал (считаю пока),...

Рисую линию без MVVM все ОК. C MVVM произвольный старт
Добрый день всем. Рисую линию при помощи анимации. Все получилось -рисуется, стирается. Но у...

Приложение MVVM. Быстрая "Нестрогая MVVM" реализация
В этой теме будет размещена простая и быстрая реализация. Основная тема:...

118
 Аватар для Andrey-MSK
3392 / 2278 / 388
Регистрация: 14.08.2018
Сообщений: 7,710
Записей в блоге: 4
01.10.2025, 09:16
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Wolfdp Посмотреть сообщение
лол, а чем это обусловлено?

Не по теме:

Оно почему-то попадает под пункт 5.8 правил... А оригинальный SO проходит...



Добавлено через 3 минуты
Цитата Сообщение от JeyCi Посмотреть сообщение
вот пример из Google использования CanExecuteMyCommand
Я вам это показал на первой странице

Добавлено через 35 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Речь же про поднятие CanExecuteChanged.
Вообще-то реализация AsyncRelayCommand из CommutityToolkit сама всё это делает. Кнопки выключаются во время выполнения команды.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
01.10.2025, 09:50
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Вообще-то реализация AsyncRelayCommand из CommutityToolkit сама всё это делает. Кнопки выключаются во время выполнения команды.
И что?
Изменение зависимости же может же быть не только во время выполнения команды кнопки.
Вот выше я дал пример: Пример с двумя кнопками.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Пример с двумя кнопками.
В одной есть поднятие CanExecuteChanged, в другой нет.
Зависимость изменяется асинхронно, но в потоке диспетчера окна.
Не надо надеяться на асинхронные команды, как на некую панацею от всех болячек.
Поднятие CanExecuteChanged можно внедрить и в базовую реализацию, а не только в асинхронную, но это не решает проблем зависимостей CanExecute от асинхронно изменяющихся состояний.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
02.10.2025, 17:20  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
реализация AsyncRelayCommand из CommutityToolkit
CommunityToolkit.Mvvm --version 7.0.3 - net5.0, netstandard2.0 netstandard2.0, netstandard2.1
жаль под фреймворк нет... вопросы снимаются...
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Не надо надеяться на асинхронные команды, как на некую панацею от всех болячек.
Поднятие CanExecuteChanged можно внедрить и в базовую реализацию, а не только в асинхронную, но это не решает проблем зависимостей CanExecute от асинхронно изменяющихся состояний.
как бы и не панацея, но весь work лучше исполнять в background'e - это однозначно... просто надо перестроить мозг с Task.Run() на RelayCommand... Вот раньше как просто было,
во View
C#
1
2
3
4
5
6
7
// C# code sample
private async void LoadDataButton_Click(object sender, EventArgs e)
{
    // Perform time-consuming task asynchronously
    await Task.Run(() => LoadDataFromDatabase());
    // Update UI or handle the result
}
правда потом расписывать все делегаты неприятно было...
Кликните здесь для просмотра всего текста
из DA :
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// implement data access patterns like the Repository pattern.
public interface IRepository<T>
{
    IEnumerable<T> GetAll();
    T GetById(int id);
    void Add(T entity);
    void Update(T entity);
    void Delete(T entity);
}
 
public class EmployeeRepository : IRepository<Employee>
{
    // Implementation details
}
В Model все DTO (или entities в EF)...


спасибо большое за примеры - обязательно разберу всё внимательно и async'и, которые под капотом, тоже очень интересны были.. (пока немного ковыряю свою логику как развернуть под WPF силами фреймворка 4.5.2) - поэтому немного выпадаю с ветки, пока ковыряю свои задачи... конечно, хочется по-проще и по-правильнее реализовывать даже небольшие задачи, а не снова лезть в изучение каждого нового подключаемого пакета -- ведь базовая логика "она всегда одна" - даже в каждом новом пакете
0
 Аватар для Andrey-MSK
3392 / 2278 / 388
Регистрация: 14.08.2018
Сообщений: 7,710
Записей в блоге: 4
02.10.2025, 17:34
Цитата Сообщение от JeyCi Посмотреть сообщение
жаль под фреймворк нет
Как это?
Цитата Сообщение от JeyCi Посмотреть сообщение
netstandard2.0
Это работает под NET Framework 4.x...
Цитата Сообщение от JeyCi Посмотреть сообщение
как развернуть под WPF силами фреймворка 4.5.2
А чем не устраивает NET 6+?
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
02.10.2025, 20:30  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А чем не устраивает NET 6+?
VSBT 2019 (net.core5.0) win32

Добавлено через 5 минут
netstandard2.0
Targeting Multiple Platforms: A .NET Standard 2.0 library can be consumed by .NET Framework 4.6.1+ and .NET Core 2.0+ (and subsequent .NET versions),
p.s. вы кстати на Linux'e пишите или на Windows?.. явно на Linux'e
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
02.10.2025, 20:32
Цитата Сообщение от JeyCi Посмотреть сообщение
CommunityToolkit.Mvvm --version 7.0.3 - net5.0, netstandard2.0 netstandard2.0, netstandard2.1
жаль под фреймворк нет...
НЭ понял...


Цитата Сообщение от JeyCi Посмотреть сообщение
как бы и не панацея, но весь work лучше исполнять в background'e - это однозначно... просто надо перестроить мозг с Task.Run() на RelayCommand...
Ну, это связанно с использованием Биндингов.
В MVVM они не обязательны, но для WPF являются основным средством связи целевых свойств и источниками. Можно и без них обойтись, но с ними код получается гораздо проще, чище, легче читается, тестируется и т.д. Поэтому лучше подучиться и со временем сами не будете понимать "а что там сложного было".

Лично у меня переход от уровня "слышал о C#? но никогда его не пробовал, а WPF даже не слышал" до уровня "продвинутого начинающего" - ушла месяца три-четыре. И не активного изучения, а как хобби, по мере свободного времени.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
02.10.2025, 20:35
Цитата Сообщение от JeyCi Посмотреть сообщение
Вот раньше как просто было,
Не понял, что вы хотели по этой ссылке показать.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
02.10.2025, 20:43  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Не понял, что вы хотели по этой ссылке показать.
ой, await Task.Run(() => LoadDataFromDatabase() думала, здесь было - sorry. можете снять линк - значит уже не найду, чего там раньше было

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
НЭ понял...
они же не подсвечены - валидны только подсвеченные, насколько понимаю (выделенные синим фоном)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
02.10.2025, 21:20
Цитата Сообщение от JeyCi Посмотреть сообщение
они же не подсвечены - валидны только подсвеченные, насколько понимаю (выделенные синим фоном)
Синие - это нацеливание
Остальные - это совместимость.

Цитата Сообщение от JeyCi Посмотреть сообщение
можете снять линк - значит уже не найду, чего там раньше было
https://blog.magnusmontin.net/... on-in-wpf/
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
02.10.2025, 21:58  [ТС]
Цитата Сообщение от JeyCi Посмотреть сообщение
правда потом расписывать все делегаты неприятно было... в WinForms
да, с WPF - свои нюансы...
1) новое окно создать в MVVM
Some MVVM frameworks (e.g. MVVM Light) make use of the Mediator pattern. So to open a new Window (or create any View) some View-specific code will subscribe to messages from the mediator and the ViewModel will send those messages.
2) и то, о чём уже говорили в этой ветке
they all (MVVM frameworks) use a DI/IoC container and then provide you with an interface, something like IDialogManager and an implementation of their own, and then they ask you to accept this interface in your view model and use it to show dialogs. So to sum this up, i would use dependency injection, have an interface for showing dialogs, and then provide and implementation of that, and register it with the di container and then consume it from my view model or views.
3) и ваши пояснения
Цитата Сообщение от Элд Хасп Посмотреть сообщение
перестроить мозг с Task.Run() на RelayCommand...
- Ну, это связанно с использованием Биндингов.
p.s.
да уж - "базовая логика - всегда одна" - делаем интерфейс и от него наследуем любые подробности в любые custom классы... включая дополнительную логику...

- если проект небольшой - то банального List<VM> может быть вполне достаточно
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
02.10.2025, 23:42
Цитата Сообщение от JeyCi Посмотреть сообщение
да, с WPF - свои нюансы...
В WPF есть "свои навороты".
Если кто-то не хочет использовать Binding, MVVM, то вполне можно писать как на формах и с использованием MVP.
Биндинги пришли с форм. Но там они требовали "ручного" задания.
В WPF этот механизм усовершенствовали и добавили XAML. В результате использование биндигов очень сильно облегчилось. Поэтому они стали основным средством связи UI с данными. Но их широкое использование потребовало пересмотреть подходы и требования к источникам данных, что в свою очередь потребовало некой прослойки между View и Model. Так и появился MVVM.
Но очень ошибочно воспринимать ViewModel как замену Code Behind. Эта рекомендация имеет совсем иное происходждение. Если посмотрите ранние примеры, туториалы для WPF - они очень похожи на Формы. Со временем рос опыт разработчиков, появлялись новые требования и сформировалось компетентное мнение, что отсутствие Code Behind упрощает тестирование кода, упрощает его поддержку и модернизацию, упрощает чтение кода и как следствие упрощает понимание, обмен кода, что упрощает коллективное программирование.
Поэтому со временем опытные разработчики, а именно они задаю тренды, практически всегда стали использовать в WPF решениях MVVM и полностью отказываться от Code Behind. Что в свою очередь сформировало мнение якобы отказ от Code Behind это требование MVVM.

Цитата Сообщение от JeyCi Посмотреть сообщение
1) новое окно создать в MVVM
С точки зрения ViewModel - не бывает "открыть окно". Окно - это внутренняя деталь реализации View.
Суть ViewModel - отражать Модель в удобно виде.
Поэтому задача может быть такая: Как известить потребителей ViewModel о таком-то изменении состояния Модели?
А что потом сделает потребитель в ответ на это извещение для ViewModel "фиолетово".

Механизм извещения по сути в .Net только один - это внедрение делегата потребителем и в нужный момент ViewModel по нему вызывает метод.
А вот способов внедрения делегатов множество. Что в голову сейчас пришло:
- прямая передача в конструкторе (часто называют метод обратного вызова) или в свойстве;
- подписка на событие ViewModel;
- внешние сервисы (Диалоговый сервис, Шина сообщений и др.) в который потребитель внедряет делегаты, а ViewModel забирает их оттуда;
- Реактивное программирование;
- DI.

Названия, реализации множественны, что лучше-хуже можно спорить до бесконечности.
Но суть всего этого - это передать делегат потребителя в ViewModel (или в другой источник извещений).
0
 Аватар для Andrey-MSK
3392 / 2278 / 388
Регистрация: 14.08.2018
Сообщений: 7,710
Записей в блоге: 4
03.10.2025, 08:44
Цитата Сообщение от JeyCi Посмотреть сообщение
p.s. вы кстати на Linux'e пишите или на Windows?.. явно на Linux'e
Откуда WPF взялся на Linux? Это платформозависимая технология, основанная на Win32 API.
Для кроссплатформы есть Avalonia.
Цитата Сообщение от JeyCi Посмотреть сообщение
VSBT 2019 (net.core5.0) win32
Кто мешает поставить VS2022? Тем более есть бесплатная версия Community.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
03.10.2025, 15:57  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но их широкое использование потребовало пересмотреть подходы и требования к источникам данных,
и не очень пересмотрели
Для упрощения работы с источниками данных в WPF есть такая функциональность, как провайдеры данных. Они позволяют связывать источники данных и элементы интерфейса. По умолчанию доступно два провайдера данных: ObjectDataProvider (для работы с объектами) и XmlDataProvider (для работы с данными из xml-файлов).
json-deserializer всё равно писать разработчику -- плодить классы, а не брать из интерфейса... хотя, конечно ObjectDataProvider.IAsynchronous - хорошее качество...
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Механизм извещения по сути в .Net только один - это внедрение делегата потребителем и в нужный момент ViewModel по нему вызывает метод.
А вот способов внедрения делегатов множество. Что в голову сейчас пришло:
да, имеются Диалоговые окна... ладно, буду смотреть binding'и -- может, писанины поменьше будет... но главное, в чём вы правы - паттерн M.V. выведет модель и на WPF (через VM), и на Console и др. -- я в принципе всегда разделяла Model и View (без этого никак), но прослойка VM для формирования нужных объектов для xaml WPF, как Andrey-MSK сказал в предыдущем посту, -- тоже платформо-зависима, вот и ещё один нюанс...
0
 Аватар для Andrey-MSK
3392 / 2278 / 388
Регистрация: 14.08.2018
Сообщений: 7,710
Записей в блоге: 4
03.10.2025, 16:18
Цитата Сообщение от JeyCi Посмотреть сообщение
да, имеются Диалоговые окна...
Это стандартные окна Windows. А если захотите сделать кастомный диалог, как будет привязывать к нему VM и открывать этот диалог? Вот тут на помощь приходят самописные сервисы
Цитата Сообщение от JeyCi Посмотреть сообщение
но прослойка VM для формирования нужных объектов для xaml WPF, как Andrey-MSK сказал в предыдущем посту, -- тоже платформо-зависима, вот и ещё один нюанс...
Не VM платформозависима, а WPF (View). VM вообще фиолетово на чём исполняться, в ней не используются методы и свойства из PresentationFramework.
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
03.10.2025, 19:36  [ТС]
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
Не VM платформозависима, а WPF (View).
точно, сама же только что разделила для себя MVVM и WPF вообще разные вещи -- WPF это только View, которая платформозависима... а MVVM - паттерн по слоям вниз... sorry ... - даже симпатичный Dialog Freezable встретился... дурные примеры тоже встречаются - когда в code-behind люди ещё делегаты засовывают -- ну это вообще нарушение принципов binding'a, мне кажется...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16165 / 11285 / 2891
Регистрация: 21.04.2018
Сообщений: 33,174
Записей в блоге: 2
03.10.2025, 20:10
Цитата Сообщение от JeyCi Посмотреть сообщение
Для упрощения работы с источниками данных в WPF есть такая функциональность, как провайдеры данных.
Провайдеры данных (DataSourceProvider) - это маленькая толика источников и разработана для создания источника в XAML. Используется исключительно редко. "На заре" WPF думали, что это упростит реализации WPF "чисто в XAML". Эти источники очень плохо совместимы с MVVM.
В своём сообщении я имел виду не эти источники. А те которые служат источниками для привязок. У привязок всегда есть целевые объект и свойство и источники объект и свойство.
Основным объектом источником в MVVM является ViewModel.

Цитата Сообщение от JeyCi Посмотреть сообщение
да, имеются Диалоговые окна...
Это один из способов внедрения делегатов (в более широком смысле - передачи методов).
В примере - это тоже происходит.

Цитата Сообщение от JeyCi Посмотреть сообщение
о прослойка VM для формирования нужных объектов для xaml WPF, как Andrey-MSK сказал в предыдущем посту, -- тоже платформо-зависима, вот и ещё один нюанс...
В реальных приложениях я пишу VM на Standard 2.0.
Менее платформозависимо, наверное, и не возможно на Шарпе.
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3461 / 2782 / 575
Регистрация: 04.09.2018
Сообщений: 8,746
Записей в блоге: 3
04.10.2025, 01:41
Цитата Сообщение от JeyCi Посмотреть сообщение
когда в code-behind люди ещё делегаты засовывают
Что в этом смущает? Это обычный подход. Скажем, как в некотором UserControl'е - это его собственная логика и она может содержаться в его собственном CB. Это никоим образом не связано с mvvm, и тем более не нарушает ни один из MV* паттернов.

Цитата Сообщение от JeyCi Посмотреть сообщение
разделила для себя MVVM и WPF вообще разные вещи
Похоже, вы вообще не в теме... Простите.
Ответ на ваш вопрос был дан достаточно давно и вполне конкретный. Все что происходит после этого, больше походит на какой-то троллинг. 4 страницы ни о чем..
0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
12.10.2025, 19:19  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
какой-то троллинг.
от вас!


Добавлено через 41 секунду
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Большинство фрамеворков GUI (Формы, WPF, UWP, WinUI и др.) поддерживают потокобезопасность через запрет работы в любом потоке кроме потока создавшего GUI и его элементы
да у меня LongRunTask запустился только из button_Click... и в него ref на TextBox задала на параметр - чтобы тестово отпечатать result... - не вписывается это (асинхронная загрузка файлов) в Binding у меня пока что... только в обычный Click_Event (как на WinForms)...

Пример Архитектуры (по линку - один ниже для всего) про Repositary, EF (которую все почему-то невзлюбили), Model и т.д.:
1) в IRepositary - нужные действия с db
2) уже в реализации его - весь EF
3) Migrations - вероятно, для code-first
4) отдельно Update - в public class CreditApplicationRepository : Repository<CreditApplication>, ICreditApplicationRepository - т.к. // Update method is implemented here since isn't a good practice to implement it on the Repository
5) отдельно в public class ApplicationDbContext : IdentityDbContext задаётся DbContext - тоже с участием using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
6) отдельно
C#
1
2
3
4
5
6
   public class ErrorViewModel
    {
        public string RequestId { get; set; }
 
        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
    }
7) и самое интересное: Middleware-папка для внедрения DI последовательностей в pipeline, да ещё и Differing from Controllers, Middlewares allows injection direct into InvokeAsync.. - public async Task InvokeAsync(HttpContext context, TransientService transientService, ScopedService scopedService, SingletonService singletonService)

ну, явно же, - последний пункт внедряет зависимости в HttpContext.Items в class LifetimeController : Controller'е -- и живут они, наверно, пока живёт то, что запущено фоновыми сервисами в HomeController'e -- т.е. эти зависимости... только контейнер IServiceProvider (или любой др. что-то не вижу) ??

8) а HomeController запускает разные Views ... интересным IActionResult типом (для веб)
Тип возвращаемого значения IActionResult можно использовать, если в действии допускаются несколько типов возвращаемого значения ActionResult
?? - тут, вероятно, вообще можно интерфейс ActionResult расписывать как угодно наследниками (к слову об изменении логики и о том, что ReayCommand - это Action, вызывающий Event) ..

p.s. что-то у меня в NET.Framework 4.5.1 - множественное наследование не проходит
0
12.10.2025, 19:27

Не по теме:

Цитата Сообщение от JeyCi Посмотреть сообщение
что-то у меня в NET.Framework 4.5.1 - множественное наследование не проходит
А в 4.5.2?

0
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
12.10.2025, 21:29  [ТС]
а, так вот к чему я всё это написала - проходим credit_approved (бизнес-логика) в Task<IActionResult>
Кликните здесь для просмотра всего текста
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
27
28
29
30
31
32
33
public async Task<IActionResult> CreditApplicationPost(
            [FromServices] Func<CreditApprovedEnum, ICreditApproved> creditService
            )
        {
            if (ModelState.IsValid)
            {
                var (validationPassed, errorMessages) = await this._creditValidator.PassAllValidations(CreditModel);
 
                CreditResult creditResult = new CreditResult()
                {
                    ErrorList = errorMessages,
                    CreditID = 0,
                    Success = validationPassed,
                };
 
                if (validationPassed)
                {
                    CreditModel.CreditApproved = creditService(CreditModel.Salary > 50000 ? CreditApprovedEnum.High : CreditApprovedEnum.Low)
                                                    .GetCreditApproved(CreditModel);
                    // add record to database
                    this._unitOfWork.CreditApplication.Add(CreditModel);
                    this._unitOfWork.Save();
                    creditResult.CreditID = CreditModel.Id;
                    creditResult.CreditApproved = CreditModel.CreditApproved;
                    return RedirectToAction(nameof(CreditResult), creditResult);
                }
                else
                {
                    // don't add record to database, but return the values to the view
                    return RedirectToAction(nameof(CreditResult), creditResult);
                }
            }
            return View(CreditModel);

- ну, это, конечно, мало относится к View (с первого взгляда) и располагается в Controller'e от MVC... а VMки условно вынесены в Model... но по факту - эта Task возвращает окно от VM - return View(HomeVM);... вот, действительно, асинхронно вышли на смену GUI...

наверно, потому что тут всё-таки Host () в Program.cs
C#
1
2
3
4
5
6
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
поэтому Task'ом и можем выйти на View ...

p.s. и про EF+sqlite - observableCollection сразу в DataContext
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.10.2025, 21:29

WPF, MVVM, сложная логика контрола
Какие механизмы есть в WPF, чтобы оставаясь в рамках MVVM иметь возможность реализации сложной...

MVVM. Ищу более удобную реализацию следующей логики
Простой случай: пользователь авторизируется в приложении: Model //Authorization ...

MVVM бизнес логика и Model
Всем привет! Я уже довольно долго пытаюсь разобраться что же представляет из себя архитектура...

Логика в свойстве (MVVM)
Не судите строго! Допускается-ли логика внутри свойства? Или как правильно реализовать по...

Как реализовать работу нескольких окон под шаблоном MVVM?
Использую шаблон MVVM. Всё что было в слое View всегда умудрялся держать только в xaml, и всё...


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

Или воспользуйтесь поиском по форуму:
80
Закрытая тема Создать тему
Новые блоги и статьи
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru