Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 03.09.2022
Сообщений: 69

Некоторые вопросы по паттерну MVVM

15.10.2023, 21:20. Показов 409. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Посмотреть сообщение
Вопрос вынесен из темы Как извлечь ширину ячейки?
Элд Хасп, ....
Да, поэтому и написал, что говнокод, ибо не у кого спросить многие вещи помимо форума... По задумке, это огромный pet-проект с целью поработать с многими библиотеками, WPF, ASP.Net и прочее... Ибо по-другому не научиться что-то делать
Можете ответить на некоторые вопросы по паттерну MVVM? Я понимаю, что Вы отправите к собственному примеру, который на форуме, но всё же на чём-то своём более понятно. Можете посмотреть общую логику?
1) У меня в проекте многое реализовано через события, что уже не очень хорошо, многие вещи переделаются через Binding после оформления интерфейса и отправятся в VievModel (там будут свойства, которые свяжут модель представление) -> Model.
2) Если останутся события, куда их нужно деть? В модель? Тогда возникнут трудности с манипуляцией того же dataGrid.
Получается событие поместить в ViewModel. Оттуда вызывать метод, который обращается к Model.
3) Ячейки, которые сгенерируются в коде, отправятся в View. Но мне нужно будет сделать их "полосатыми". То есть менять какие-то внутренние свойства представления. Это сгенерировать в ViewModel?
4) Что должно находится в Main.xaml.cs?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.10.2023, 21:20
Ответы с готовыми решениями:

Создание диалоговых окон, согласно паттерну MVVM
Заинтересовался темой создания диалоговых окон, согласно паттерну MVVM. Пожалуй самый простой пример нашёл здесь В других примерах ещё...

Некоторые вопросы
Всем привет ! Я недавно начал изучать Паскаль, и у меня возникло несколько вопросов, которые я бы хотел прояснить. И так, вопрос :) : 1....

Некоторые вопросы по проге
В теме 3 дня, поэтому прошу сильно не пинать. Был конечно школьный опыт в qb и tp на xt-шках, но было давно... Посмотрите код, есть пара...

8
0 / 0 / 0
Регистрация: 03.09.2022
Сообщений: 69
15.10.2023, 21:42  [ТС]
Элд Хасп, блин... Проще pet-проекта в голову не приходит... Даже для backend... А на реальный проект, с моим не особо большим практическим опытом, вряд ли попаду. Создать тему?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
15.10.2023, 22:05
Цитата Сообщение от Dmitry12329 Посмотреть сообщение
Можете посмотреть общую логику?
Там дремучий лес.

Весь смысл паттернов архитектура приложения - это создать простую, удобную, легко читаемую архитектуру.
В паттернах MV* основная часть приложения - это МОДЕЛЬ.
А у вас её нет, в принципе.
Для начала создайте Модель в ОТДЕЛЬНОМ проекте. Лучше всего типа "Библиотека классов Standard". Но вам нужно работать с SQLite - не знаю Standard поддерживает или нет. Если Standard не получится - то "Библиотека классов .Net6".

Без наличия отлаженной Модели нет никакого смысла приступать к View.

Цитата Сообщение от Dmitry12329 Посмотреть сообщение
1) У меня в проекте многое реализовано через события, что уже не очень хорошо,
Да. Это моветон, если в них происходит работа с данными. Для создания же логики UI иногда приходится их использовать. Но в этом случае лучше создавать Custom Control, а не пихать всё в Code Behind.

Цитата Сообщение от Dmitry12329 Посмотреть сообщение
многие вещи переделаются через Binding после оформления интерфейса и отправятся в VievModel (там будут свойства, которые свяжут модель представление) -> Model.
Вы размышляете "от View", а для создания нормальной архитектуры нужно думать "от Модели".
Модель - это основной слой приложения в котором находится вся Бизнес (Доменная) логика.
ViewModel - это не "замена Code Behind View". Единственная функция ViewModel - это отражение Модели в удобном для View виде. Для WPF "удобный вид" - это отражение через свойства.

Цитата Сообщение от Dmitry12329 Посмотреть сообщение
2) Если останутся события, куда их нужно деть? В модель? Тогда возникнут трудности с манипуляцией того же dataGrid.
Какие события? Вы пытаетесь в одном вопросе получить ответ "на все случаи жизни". Так не выйдет. Каждая задача уникальна, для каждой требется свой подход в решении. В большинстве случаев, в WPF всё делается через привязки. Они заменяют море событий привычных в использовании, на пример, на Формах.
Но всё индивидуально. Вполне могут быть задачи, которые через привязки не решить.

Цитата Сообщение от Dmitry12329 Посмотреть сообщение
3) Ячейки, которые сгенерируются в коде, отправятся в View. Но мне нужно будет сделать их "полосатыми". То есть менять какие-то внутренние свойства представления. Это сгенерировать в ViewModel?
Ни в коем случае.
Из VM поступают просто контейнеры с данными (Сущности, DTO и т.п.) А как их отобразить - это задача View.

Цитата Сообщение от Dmitry12329 Посмотреть сообщение
4) Что должно находится в Main.xaml.cs?
В идеале ничего кроме:
C#
1
2
3
4
5
6
    public partial class MainWindow : Window
    {
        // Даже этот конструктор по умолчанию не обязателен.
        // Нужен только, если экземпляр Окна будет создавать в коде Шарпа.
        public MainWindow() => InitializeComponent();
    }
Добавлено через 6 минут
Цитата Сообщение от Dmitry12329 Посмотреть сообщение
Проще pet-проекта в голову не приходит.
Тогда реализовывать его надо пошагово. От простого к сложного.
У вас ещё нет даже начальной архитектуры. Нет Модели. А вылезете в какие-то тонкие нюансы настройки такого сложного элемента как DataGrid.
Сначала реализуйте саму логику приложения, создайте рабочую версию. А украшательствами займётесь потом.
0
0 / 0 / 0
Регистрация: 03.09.2022
Сообщений: 69
15.10.2023, 22:11  [ТС]
Элд Хасп, то, что дремучий лес, я понял. Обдумываю пока архитектуру, чтоб по 500 раз не переписывать и не путаться... Кажется, стало понятнее.
Model = содержится вся бизнес логика, шагаем от неё
ViewModel = преимущественно содержит только свойства, которые Binding с View
View = xaml разметка, оно понятно.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Ни в коем случае.
Из VM поступают просто контейнеры с данными (Сущности, DTO и т.п.) А как их отобразить - это задача View.
1) Получается, мне нужно будет заранее приготовить шаблон для ячеек во View, когда туда придут данные от ViewModel, View само разберётся что с ними делать?
2) Если я организую всё как мне покажется нужно, сможете кратко откомментировать со стороны архитектуры?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Лучше всего типа "Библиотека классов Standard". Но вам нужно работать с SQLite - не знаю Standard поддерживает или нет. Если Standard не получится - то "Библиотека классов .Net6"
3) Уточняющий вопрос, типо, как библиотека классов, чтоб просто её подключить в using?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
15.10.2023, 22:18
Цитата Сообщение от Dmitry12329 Посмотреть сообщение
1) Получается, мне нужно будет заранее приготовить шаблон для ячеек во View, когда туда придут данные от ViewModel, View само разберётся что с ними делать?
Думайте по другому.
Вот у меня в Модели есть такие-то данные, для пользователя нужно одновременно видеть в объекте то-то и то-то. Значит мне нужно в VM создать тип который объединит таки-то данные Модели.
В большинстве задач, даже создавать типы в VM не нужно. Хватает типов которые поставляет Модель.

Цитата Сообщение от Dmitry12329 Посмотреть сообщение
2) Если я организую всё как мне покажется нужно, сможете кратко откомментировать со стороны архитектуры?
Да.
Но по времени - не могу сказать.
В будни очень занят. Только какие-то коротки комментарии.

Цитата Сообщение от Dmitry12329 Посмотреть сообщение
3) Уточняющий вопрос, типо, как библиотека классов, чтоб просто её подключить в using?
Да. Так же как вы используете .Net библы и NuGet пакеты.

Структура WPF решения
Структура связей в WPF Решении
Структура WPF+БД решения
Потоки в асинхронном MVVM
0
0 / 0 / 0
Регистрация: 03.09.2022
Сообщений: 69
15.10.2023, 22:20  [ТС]
Элд Хасп,
Цитата Сообщение от Dmitry12329 Посмотреть сообщение
Model = содержится вся бизнес логика, шагаем от неё
ViewModel = преимущественно содержит только свойства, которые Binding с View
View = xaml разметка, оно понятно.
В целом такое содержание паттерна?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
15.10.2023, 22:38
Цитата Сообщение от Dmitry12329 Посмотреть сообщение
В целом такое содержание паттерна?
Не совсем.

ViewModel в идеале это прокси отражающий Модель. Очень часто из VM пытаются сделать некоего "заместителя Code Behind". Например, вы интересовались "можно ли раскрасить ячейки в VM?". Имеет ли какое-то отношение раскраска ячейки к состоянию Модели? Нет, не имеет. Следовательно - это не функция ViewModel. И неважно реализуется эта раскраска через свойства, методы или ещё каким-то образом.

View - это не только XAML. В нормальном приложении, с нормальным развитым GUI в View будет "море" Шарпа. XAML - это как бы "венец" WPF. Но это декларативный язык. Он не может создавать новые методы, типы. Поэтому вся инфраструктура создаётся на Шарпе: конвертера, селекторы, прокси, Custom Control и многое другое. А в XAML потом они используются в создании компоновки.
1
0 / 0 / 0
Регистрация: 03.09.2022
Сообщений: 69
15.10.2023, 22:40  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
ViewModel в идеале это прокси отражающий Модель.
То есть, как бы модель хочет сообщить что-то внешнему миру, но может сделать это только через VM?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Поэтому вся инфраструктура создаётся на Шарпе: конвертера, селекторы, прокси, Custom Control и многое другое.
Это всё прячется в модели?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16124 / 11248 / 2888
Регистрация: 21.04.2018
Сообщений: 33,082
Записей в блоге: 2
15.10.2023, 23:09
Цитата Сообщение от Dmitry12329 Посмотреть сообщение
То есть, как бы модель хочет сообщить что-то внешнему миру, но может сделать это только через VM?
Через свои события.
Потребители Модели (в том числе VM) по этим событиям актуализируют своё состояние.

Цитата Сообщение от Dmitry12329 Посмотреть сообщение
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Поэтому вся инфраструктура создаётся на Шарпе: конвертера, селекторы, прокси, Custom Control и многое другое.
Это всё прячется в модели?
Нет. Это всё уровень View.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.10.2023, 23:09
Помогаю со студенческими работами здесь

Некоторые вопросы по flowLayoutPanel
Можно ли добавить в flowLayoutPanel 3 рядом стоящие компонента по горизонтали но при этом чтобы свойство FlowDirection = TopDown? ...

Некоторые вопросы по ucoz'у
Хотелось бы вот эту форму заполнения сделать по центру. Изначально она была растянута и была очень длинной, но через html я ее сжал. Теперь...

Некоторые вопросы по железу
Привет всем на форуме, являюсь новичком по железу - читаю статьи и книжки в интернете по PC. возникают вопросы. буду благодарен если...

Некоторые вопросы по синтаксису
Будьте так добры, пожалуйста. Помогите чуток)). Я сам сишник, а тут мне тест по учебе дали на паскаль. многое сделал уже. Но во многом еще...

ASUS G55v некоторые вопросы
новый g55vw, звук из колонок кажется не очень хорошего качества, и иногда если в наушниках сидишь звук переходит на колонки, приходится...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru