Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468

Приложение MVVM. Быстрая "Нестрогая MVVM" реализация

09.03.2023, 11:49. Показов 2958. Ответов 48
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В этой теме будет размещена простая и быстрая реализация.
Основная тема: Приложение MVVM. VMs и навигация
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.03.2023, 11:49
Ответы с готовыми решениями:

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

Реализация паттерна MVVM
Добрый день, форумчане. Ни разу не пользовался данным паттерном программирования, прочитал уже кучу статей, но ни одна из них не может мне...

MaterialDesign - Transitions, MVVM реализация
Добрый день! В библиотеке MaterialDesign есть интересная реализация переходов между UserControl (основная разметка в файле...

48
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
11.03.2023, 12:12  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для этого нужно делать два РАЗНЫХ локальных клона репозитория в каждом из которых своя отрытая ветка.
Но разве это проблема?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Так же не очевиден сам код, он трудно читается. Что-то куда-то добавляется, декапсулируется делегат. Стороннему разработчику в такую мешанину трудно вникать. А ООП это не про то "как мне удобно", а про коллективное программирование.
Я не претендую на то, что код легко понимаем. У меня просто была такая идея. И я вам ее показал. В эффективности кода я тоже сразу начал сомневаться

Добавлено через 5 минут
Вообще, я его как раз для обсуждения и критики написал

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сравните с такой реализацией:
В вашу реализацию в принципе та же идея заложена
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
11.03.2023, 17:07
Цитата Сообщение от INexteR Посмотреть сообщение
Но разве это проблема?
Нет.
Вопрос удобства.
Мне удобнее в одном работать, а не переключаться между разными клонами.
В любом случае, это уже не актуально. Решения разделены по веткам.

Цитата Сообщение от INexteR Посмотреть сообщение
Вообще, я его как раз для обсуждения и критики написал
Ну, от меня вы её получили.

Но чтобы "расти" вам надо учиться самому оценивать свой и чужой код.
Поэтому я вам и написал:
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Попробуйте сами проанализировать и сравнить с другими реализациями.
Напишите что у вас вышло - потом обсудим.
Старайтесь писать такую оценку развёрнуто, а не только выводы.
Чтобы было понятно, где и как вас поправить, что посоветовать дополнительно изучить.

Цитата Сообщение от INexteR Посмотреть сообщение
В вашу реализацию в принципе та же идея заложена
Да. Дело-то именно в реализации, а не в идее.
Идея у нас та же самая была реализована и в основном Решении.

Нет мультиделегата - экономим на двойном вызове методов.
Нет двойного явного приведения - тоже экономим в два раза.
Нет обращения к DependencyProperty. Вместо него используется локальная переменная. Это вообще даёт экономию во много раз.
С точки зрения прозрачности кода - используются простые статические методы и лямбды с ними.
Нет никаких "танцев с бубном" с декапсуляцией.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
11.03.2023, 20:59
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Нет двойного явного приведения - тоже экономим в два раза.
INexteR, здесь, кстати, немного соврал.
Двойной вызов всё равно есть. Сначала вызывается лямбда, потом метод.
Уберу этот войной вызов, но может код получиться не такой прозрачный.
Посмотрю по ходу как красиво сделать.

Добавлено через 2 часа 26 минут
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Посмотрю по ходу как красиво сделать.
C#
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
        private string? inputText;
        private object selectedManufacturer = ViewsHelper.AllManufacturers;
        public string? SearchText
        {
            get => inputText;
            set { inputText = value; SearchChanged(); }
        }
        public object SearchManufacturer
        {
            get => selectedManufacturer;
            set { selectedManufacturer = value ?? ViewsHelper.AllManufacturers; SearchChanged(); }
        }
 
        private FilterEventHandler? filter;
        private void SearchChanged()
        {
            string searchText = inputText?.Trim() ?? string.Empty;
            Manufacturer? searchManufacturer = selectedManufacturer as Manufacturer;
            source.Filter -= filter;
 
            filter = (string.IsNullOrEmpty(searchText), searchManufacturer == null) switch
            {
                (false, false) => NameManufacturerSearch,
                (false, true) => NameSearch,
                (true, false) => ManufacturerSearch,
                _ => null,
            };
 
            source.Filter += filter;
 
            void NameSearch(object sender, FilterEventArgs e)
            {
                e.Accepted = ((Product)e.Item).Name.Contains(searchText);
            }
            void ManufacturerSearch(object sender, FilterEventArgs e)
            {
                e.Accepted = ((Product)e.Item).Manufacturer == searchManufacturer;
            }
            void NameManufacturerSearch(object sender, FilterEventArgs e)
            {
                Product product = (Product)e.Item;
                e.Accepted = product.Manufacturer == searchManufacturer &&
                             product.Name.Contains(searchText);
            }
        }
Добавлено через 3 минуты
Или даже так:
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
34
35
36
        private string? inputText;
        private object selectedManufacturer = ViewsHelper.AllManufacturers;
        public string? SearchText
        {
            get => inputText;
            set { inputText = value; SearchChanged(); }
        }
        public object SearchManufacturer
        {
            get => selectedManufacturer;
            set { selectedManufacturer = value ?? ViewsHelper.AllManufacturers; SearchChanged(); }
        }
 
        private FilterEventHandler? filter;
        private void SearchChanged()
        {
            string searchText = inputText?.Trim() ?? string.Empty;
            Manufacturer? searchManufacturer = selectedManufacturer as Manufacturer;
            source.Filter -= filter;
 
            filter = (string.IsNullOrEmpty(searchText), searchManufacturer == null) switch
            {
                (false, false) => (object sender, FilterEventArgs e) =>
                {
                    Product product = (Product)e.Item;
                    e.Accepted = product.Manufacturer == searchManufacturer &&
                                 product.Name.Contains(searchText);
                }
                ,
                (false, true) => (object sender, FilterEventArgs e) => e.Accepted = ((Product)e.Item).Name.Contains(searchText),
                (true, false) => (object sender, FilterEventArgs e) => e.Accepted = ((Product)e.Item).Manufacturer == searchManufacturer,
                _ => null,
            };
 
            source.Filter += filter;
        }
1
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
06.04.2023, 15:29  [ТС]
Элд Хасп, можете Вы развить эту тему? То есть выполнить добавление/редактирование в этом проекте. Я не знаю как в нестрогой реализации сделать данное и сейчас сам занят другим проектом. Если у вас будет время, конечно
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
06.04.2023, 21:21
Цитата Сообщение от INexteR Посмотреть сообщение
То есть выполнить добавление/редактирование в этом проекте.
На выходных напомните.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
08.04.2023, 13:26  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
На выходных напомните.
Напоминаю

Добавлено через 3 часа 34 минуты
Элд Хасп, я бы хотел понять, как по-простому создать диалог для добавления и редактирования. Больше ничего не требуется
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
08.04.2023, 20:08
Цитата Сообщение от INexteR Посмотреть сообщение
как по-простому создать диалог для добавления и редактирования.
Вот с этим загвоздка.
Проще чем в основном проекте не выйдет.

Единственное - можно убрать AddOrUpdateProductDialogData и TempProduct.
VM задавать сразу в Контекст Данных. Вместо TempProduct использовать Product - у нас же нет инкапсуляции.
Экземпляр Product для редактирования и Mode задавать в ресурсах по отдельности.
Моде тоже можно убрать, но тогда настраивать AddOrUpdateProductDialog под режим придётся в Code Behind. Не могу сказать можно ли это считать упрощением. По мне проще использовать Mode и настраивать в XAML.

Добавлено через 1 минуту
Цитата Сообщение от INexteR Посмотреть сообщение
Напоминаю
Сегодня тоже весь день работал - только освободился.
И завтра опять с утра работаю.
Сейчас приду в себя немного, постараюсь сделать какую-то реализацию.

Добавлено через 1 час 24 минуты
INexteR, скинул "рыбу" диалога. Думаю, дальше сможете продолжить сами.
0
 Аватар для INexteR
17 / 16 / 1
Регистрация: 25.01.2023
Сообщений: 468
08.04.2023, 20:14  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Сегодня тоже весь день работал - только освободился.
Эх, тяжело вам, наверное
Цитата Сообщение от Элд Хасп Посмотреть сообщение
INexteR, скинул "рыбу" диалога. Думаю, дальше сможете продолжить сами.
Спасибо большое!!
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
08.04.2023, 20:30
Цитата Сообщение от INexteR Посмотреть сообщение
Эх, тяжело вам, наверное
Пару-тройку месяцев было тяжко.
Сейчас уже на спад идёт. Надеюсь следующие выходные уже полностью как выходные получится провести.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.04.2023, 20:30

Корректна ли такая реализация паттерна MVVM?
Данные из формы не вводятся,а используются для отображения состояния. Программа подобна лабораторному стенду.

Реализация авторизации/регистрации через MVVM
Кто-то может покидать ссылок на реализацию регистрации и авторизации через mvvm (везде только cb), буду благодарен. (wpf).

Реализация ComboBox MVVM свойство selectionchanged
Здравствуйте! Подскажите, пожалуйста, как реализовать ComboBox в рамках MVVM, а именно, как отловить свойство SelectionChanged? View: ...

[WPF] Реализация openFileDialog в соответствии с MVVM
Здравствуйте! Подскажите как должна быть правильно реализована возможность чтения файлов с помощью OpenFileDialog в соответствии с MVVM?...

Реализация master-detail с использованием MVVM
Привет. Интересует вопрос реализации данного интерфейса при помощи MVVM. Есть модель Client, сырые данные получаю через WCF-сервис...


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

Или воспользуйтесь поиском по форуму:
49
Ответ Создать тему
Новые блоги и статьи
Программный домашний кинотеатр
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 и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru