|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||||||
Где лучше в MVVM реализовать дополнительную логику?25.09.2025, 19:46. Показов 8787. Ответов 118
Метки нет (Все метки)
мне почему-то кажется, что это не проблема, а как раз и задумано было, чтобы можно было переназначать свойства в зависимости от нужного (например, цвет текста при value>1000, условно говоря) - вот и вынесли это DP в отдельный класс... а за пример реализации и использования в XAML - спасибо!.. ? только в каких случаях это DP подключают обычно?.. как по мне, так Styles и Templates и даже Converters - нормальные внутренние (для объекта) свойства, дальше которых уже и придумать нечего (с практической точки зрения) чтобы захотеть подключать из-вне класса ещё и DP за гранью всего, что можно задать и в объекте...
0
|
||||||||
| 25.09.2025, 19:46 | |
|
Ответы с готовыми решениями:
118
|
|
|
||||
| 01.10.2025, 09:16 | ||||
|
Не по теме: Оно почему-то попадает под пункт 5.8 правил... А оригинальный SO проходит... Добавлено через 3 минуты ![]() Добавлено через 35 минут
0
|
||||
|
Модератор
|
|||
| 01.10.2025, 09:50 | |||
|
Изменение зависимости же может же быть не только во время выполнения команды кнопки. Вот выше я дал пример: Пример с двумя кнопками. Поднятие CanExecuteChanged можно внедрить и в базовую реализацию, а не только в асинхронную, но это не решает проблем зависимостей CanExecute от асинхронно изменяющихся состояний.
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||||||
| 02.10.2025, 17:20 [ТС] | |||||||||||||
|
жаль под фреймворк нет... вопросы снимаются... во View
Кликните здесь для просмотра всего текста
из DA :
спасибо большое за примеры - обязательно разберу всё внимательно и async'и, которые под капотом, тоже очень интересны были.. (пока немного ковыряю свою логику как развернуть под WPF силами фреймворка 4.5.2) - поэтому немного выпадаю с ветки, пока ковыряю свои задачи... конечно, хочется по-проще и по-правильнее реализовывать даже небольшие задачи, а не снова лезть в изучение каждого нового подключаемого пакета -- ведь базовая логика "она всегда одна" - даже в каждом новом пакете
0
|
|||||||||||||
|
|
|
| 02.10.2025, 17:34 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 02.10.2025, 20:30 [ТС] | |||
|
Добавлено через 5 минут netstandard2.0
0
|
|||
|
Модератор
|
|||
| 02.10.2025, 20:32 | |||
|
В MVVM они не обязательны, но для WPF являются основным средством связи целевых свойств и источниками. Можно и без них обойтись, но с ними код получается гораздо проще, чище, легче читается, тестируется и т.д. Поэтому лучше подучиться и со временем сами не будете понимать "а что там сложного было". Лично у меня переход от уровня "слышал о C#? но никогда его не пробовал, а WPF даже не слышал" до уровня "продвинутого начинающего" - ушла месяца три-четыре. И не активного изучения, а как хобби, по мере свободного времени.
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||
| 02.10.2025, 20:43 [ТС] | |||
await Task.Run(() => LoadDataFromDatabase() думала, здесь было - sorry. можете снять линк - значит уже не найду, чего там раньше былоДобавлено через 1 минуту
0
|
|||
|
Модератор
|
|
| 02.10.2025, 21:20 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||
| 02.10.2025, 21:58 [ТС] | |||||
|
1) новое окно создать в MVVM
да уж - "базовая логика - всегда одна" - делаем интерфейс и от него наследуем любые подробности в любые custom классы... включая дополнительную логику... - если проект небольшой - то банального List<VM> может быть вполне достаточно
0
|
|||||
|
Модератор
|
|||
| 02.10.2025, 23:42 | |||
|
Если кто-то не хочет использовать Binding, MVVM, то вполне можно писать как на формах и с использованием MVP. Биндинги пришли с форм. Но там они требовали "ручного" задания. В WPF этот механизм усовершенствовали и добавили XAML. В результате использование биндигов очень сильно облегчилось. Поэтому они стали основным средством связи UI с данными. Но их широкое использование потребовало пересмотреть подходы и требования к источникам данных, что в свою очередь потребовало некой прослойки между View и Model. Так и появился MVVM. Но очень ошибочно воспринимать ViewModel как замену Code Behind. Эта рекомендация имеет совсем иное происходждение. Если посмотрите ранние примеры, туториалы для WPF - они очень похожи на Формы. Со временем рос опыт разработчиков, появлялись новые требования и сформировалось компетентное мнение, что отсутствие Code Behind упрощает тестирование кода, упрощает его поддержку и модернизацию, упрощает чтение кода и как следствие упрощает понимание, обмен кода, что упрощает коллективное программирование. Поэтому со временем опытные разработчики, а именно они задаю тренды, практически всегда стали использовать в WPF решениях MVVM и полностью отказываться от Code Behind. Что в свою очередь сформировало мнение якобы отказ от Code Behind это требование MVVM. Суть ViewModel - отражать Модель в удобно виде. Поэтому задача может быть такая: Как известить потребителей ViewModel о таком-то изменении состояния Модели? А что потом сделает потребитель в ответ на это извещение для ViewModel "фиолетово". Механизм извещения по сути в .Net только один - это внедрение делегата потребителем и в нужный момент ViewModel по нему вызывает метод. А вот способов внедрения делегатов множество. Что в голову сейчас пришло: - прямая передача в конструкторе (часто называют метод обратного вызова) или в свойстве; - подписка на событие ViewModel; - внешние сервисы (Диалоговый сервис, Шина сообщений и др.) в который потребитель внедряет делегаты, а ViewModel забирает их оттуда; - Реактивное программирование; - DI. Названия, реализации множественны, что лучше-хуже можно спорить до бесконечности. Но суть всего этого - это передать делегат потребителя в ViewModel (или в другой источник извещений).
0
|
|||
|
|
|||
| 03.10.2025, 08:44 | |||
|
Для кроссплатформы есть Avalonia.
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||||
| 03.10.2025, 15:57 [ТС] | ||||
0
|
||||
|
|
|||
| 03.10.2025, 16:18 | |||
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
||
| 03.10.2025, 19:36 [ТС] | ||
... - даже симпатичный Dialog Freezable встретился... дурные примеры тоже встречаются - когда в code-behind люди ещё делегаты засовывают -- ну это вообще нарушение принципов binding'a, мне кажется...
0
|
||
|
Модератор
|
||||
| 03.10.2025, 20:10 | ||||
|
В своём сообщении я имел виду не эти источники. А те которые служат источниками для привязок. У привязок всегда есть целевые объект и свойство и источники объект и свойство. Основным объектом источником в MVVM является ViewModel. В примере - это тоже происходит. Менее платформозависимо, наверное, и не возможно на Шарпе.
0
|
||||
|
|
|||
| 04.10.2025, 01:41 | |||
|
Ответ на ваш вопрос был дан достаточно давно и вполне конкретный. Все что происходит после этого, больше походит на какой-то троллинг. 4 страницы ни о чем..
0
|
|||
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||
| 12.10.2025, 19:19 [ТС] | |||||||||
|
Добавлено через 41 секунду Пример Архитектуры (по линку - один ниже для всего) про 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 Repository5) отдельно в public class ApplicationDbContext : IdentityDbContext задаётся DbContext - тоже с участием using Microsoft.AspNetCore.Identity.EntityFrameworkCore;6) отдельно
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 типом (для веб)
- тут, вероятно, вообще можно интерфейс ActionResult расписывать как угодно наследниками (к слову об изменении логики и о том, что ReayCommand - это Action, вызывающий Event) ..p.s. что-то у меня в NET.Framework 4.5.1 - множественное наследование не проходит
0
|
|||||||||
| 12.10.2025, 19:27 | |
|
0
|
|
|
264 / 153 / 33
Регистрация: 29.06.2019
Сообщений: 1,554
|
|||||||||||
| 12.10.2025, 21:29 [ТС] | |||||||||||
|
а, так вот к чему я всё это написала - проходим credit_approved (бизнес-логика) в Task<IActionResult>
Кликните здесь для просмотра всего текста
- ну, это, конечно, мало относится к View (с первого взгляда) и располагается в Controller'e от MVC... а VMки условно вынесены в Model... но по факту - эта Task возвращает окно от VM - return View(HomeVM);... вот, действительно, асинхронно вышли на смену GUI...наверно, потому что тут всё-таки Host () в Program.cs
p.s. и про EF+sqlite - observableCollection сразу в DataContext
0
|
|||||||||||
| 12.10.2025, 21:29 | |
|
MVVM бизнес логика и Model
Как реализовать работу нескольких окон под шаблоном MVVM? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
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, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|