|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
|||||||||||||||||||||
MVVM postgres17.06.2020, 10:41. Показов 18709. Ответов 200
Метки нет (Все метки)
учу mvvm
появилось много вопросов я создал модель Кликните здесь для просмотра всего текста
создал сервис , который должен заполнять данными я это сделал так Кликните здесь для просмотра всего текста
после чего в основном классе Кликните здесь для просмотра всего текста
и тут первый вопрос. можно это сделать без циклов ? например сразу конвертировать в BindingList и как вообще правильно заполнять данными из бд? дальше я показываю таблицу в view Кликните здесь для просмотра всего текста
и снова вопрос. мне нужно добавлять данные в BindingList и при событии добавления/удаления/изменения делать изменения в бд? Или просто делать запросы в бд update/insert и после этого заново заполнять данными? второе звучит проще и логичней для меня.
0
|
|||||||||||||||||||||
| 17.06.2020, 10:41 | |
|
Ответы с готовыми решениями:
200
Mvvm
|
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
|
| 08.04.2021, 14:26 [ТС] | |
|
0
|
|
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
||
| 08.04.2021, 14:32 [ТС] | ||
|
Добавлено через 1 минуту диалог не исчезает даже до конца. зависает и пропадает Добавлено через 35 секунд А во втором видео он уже плавно исчезает
0
|
||
|
Модератор
|
||
| 08.04.2021, 19:24 | ||
|
onimor, добавил фиксацию:
1
|
||
| 09.04.2021, 07:55 | |
|
Не по теме: Тупо десять страниц продуктивной дискуссии, а не срача. Мне кажется, что уже после пятой, ведущему нужно начинать начислять деньги за углублённую консультацию...
0
|
|
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
||||||||
| 09.04.2021, 09:41 [ТС] | ||||||||
|
Не понял как работает
Добавлено через 6 минут Боюсь узнать сколько стоят такие консультации.. Но я не против поддержать данатом, хоть и не большим(
0
|
||||||||
|
Модератор
|
|||||||||||||||||||||||||||||||
| 09.04.2021, 09:49 | |||||||||||||||||||||||||||||||
|
Забыл, что что Репозиторий не публичный.
Для посетителей Форума выкладываю архив Решения с примером UI навигатора: PostsUINavigatorSln.7z Краткие объяснения: 1) Есть три независимые VM. В ресурсах App создаётся Локатор в каждом свойстве которого экземпляр VM:
Пример Представления SettingsViewModel. Для удобства Конструирования (Разработки) так же задаётся Контекст Данных Времени Разработки:
В нижней части кнопки для показа Представлений SettingsUC и SigninUC. В верхней части ItemsControl с кнопками для каждого поста. Справа от панели управления Регион для показа нужного Представления. В нём объявлен ContentPresenter - задавая в его свойстве Content нужное Представление обеспечивается их смена. В ресурсах Окна объявлено по экземпляру каждого представления. Во всех кнопках панели управления используются кликеры. В кликерах из ресурсов Окна получается нужный экземпляр Представления и записывается в ContentPresenter.Content. Для кнопок постов также добавлена логика по получению поста из Контекста Данных кнопки и записи его в свойство locator.PostsViewModel.SelectedPost. Для визуального выделения выбранного поста используется триггер данных в стиле кнопки. Для триггера используется мультиконвертер ищущий в полученной коллекции любой элемент эквивалентный первому. Конвертер:
3
|
|||||||||||||||||||||||||||||||
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
||
| 09.04.2021, 10:06 [ТС] | ||
|
Надеюсь сегодня успею проверить как будет работать.
0
|
||
|
Модератор
|
||||||
| 09.04.2021, 10:10 | ||||||
|
5) "Долгие" методы требуют несколько иной реализации.
Потенциально они могут вызвать лаги GUI. Поэтому их необходимо выполнять асинхронно. В Примере это продемонстрированно с методом подгрузки данных для выбранного поста.
Так как метод асинхронный, то не задерживает поток в котором происходило присвоение нового значения свойству SelectedPost.
1
|
||||||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
|
| 09.04.2021, 10:14 | |
|
А при таком способе инстанциации VM можно как-то обеспечить инжект зависимостей через конструктор VM? Там ведь, обычно, требуются и экземпляры разных частей Модели, и логгер.
0
|
|
|
Модератор
|
|||
| 09.04.2021, 10:20 | |||
![]() ТС хочет научиться. А срач возникает там, где знаний мало, а амбиций много. И вместо изучения чел доказывает "Один я д'Артаньян ....". Добавлено через 1 минуту Я же просто для упрощения примера показал инициализацию локатора в XAML. Его можно инициализировать и в CB App, как вы и делали. Добавлено через 3 минуты Суть примера несколько в другом. То что Представления не создаются каждый раз заново по шаблону. А создаются один раз при первом обращении к ним в ресурсах. В последующем используются уже созданные экземпляры. Побочным эффектом этого будет сохранение Представлением состояния UI элементов в нём. Если при использовании шаблона для этого требуется привязка каждого нужного состояния к свойству Контекста Данных, то здесь это происходит автоматически, так как экземпляр Представления будет существовать пока его явно не уничтожат.
1
|
|||
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
|
| 09.04.2021, 12:15 [ТС] | |
|
Элд Хасп, теперь пролаг только в первый раз при создании, потом все плавно. Чтоб менять UC из vm нужно делать отдельный словарь с UC и его юзать в vm? Просто есть некоторые методы , который нужно выполнить до и после смены uc.
0
|
|
|
Модератор
|
|||
| 09.04.2021, 12:27 | |||
|
В VM не должно быть никаких UI элементов. Мне, кажется, вы, вообще, напрасно вытянули логику Навигатора в VM. В данном случае, навигатор никак не взаимодействует с данными и следовательно ему нечего делать в VM. Добавлено через 2 минуты По своему функционалу VM независима от Представления. Он не знает и не должна знать какое Представление сейчас для неё используется или, вообще, есть это Представление или нет. Если Представлению в своей логике надо вызвать какие-то методы VM, то Представление это должно делать само. Добавлено через 4 минуты onimor, UI навигатор на кликерах - это только пример. Можно так же задать команды, Контекст Данных Окну и т.д. То есть сделать максимально близко к типичному для ViewModel способу. НО!!! Не каждый Контекст Данных - это обязательно ViewModel. ViewModel - это слой из паттерна MVVM связывающий Представление с Данными. При этом в Представлении может быть использован очень похожий тип, но который не имеет отношения к Данным. Допустим, функция Навигатора - это переключение страниц. И если это переключение не связанно с Данными, то это полностью функционал Представления никак не связанный с VM.
1
|
|||
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
|||||||
| 09.04.2021, 12:30 [ТС] | |||||||
0
|
|||||||
|
Модератор
|
||
| 09.04.2021, 12:40 | ||
|
Можно сделать так: 1) В VM событие SigningClosed, которое создаётся при успешной авторизации или при отказе от неё. 2) В кликере происходит подписка на это событие; 3) Панель управления переводится в состояние IsEnabled=false; 4) Показывается SigninUC; 5) Выход из кликера. В обработчике OnSigningClosed: 1) Происходит отписка от SigningClosed; 2) Включается панель управления IsEnabled=true; 3) Показывается PostUC; 4) Если надо - изменяется выбранный пост; 5) Выход из обработчика.
1
|
||
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
|
| 09.04.2021, 13:09 [ТС] | |
|
Элд Хасп, вспомнились WF). Тогда к этому еще добавиться 2 события и пару методов.
Потому что пока model не завершит все опросы, операции в других потоках и прочее- будет висеть диалог на подобие загрузки и параметры не откроются. После параметров нужно подождать пока все обратно запуститься и только потом показать PostUC. Это нормально что будет столько CB? Добавлено через 12 минут Если так подумать то пролаг и пролаг. SQL SMS вообще не отвечает пока ищет сервера и нормально им
0
|
|
|
Модератор
|
||||||||
| 09.04.2021, 15:08 | ||||||||
|
Если логики многовато, то всё же я бы перенёс её в отдельный класс и реализовал через команды. Добавлено через 16 минут Что плохо в вашем текущем Решении MainWindowsVM:
Главная её функция - это обеспечить работу Навигатора. И по сути это часть Представления, а не ViewModel. Так же как и Локатор: в нём есть свойства для привязки, реализация INPC - но это не ViewModel. Вот и вам надо разделить MainWindowsVM на два класса: Навигатор и, собственно, главная VM. При этом если вы используете концепцию с главной VM, то вам вам вряд ли нужен Локатор. Вместо Локатора в ресурчах App создайте экземпляр Главной VM. Локатор, по сути, и выполняет её роль, когда она явно в VM не реализована.
1
|
||||||||
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
|
| 09.04.2021, 16:08 [ТС] | |
|
Элд Хасп, хорошо. Попробую разделить тогда, чтоб навигация была отдельно.
0
|
|
|
96 / 76 / 25
Регистрация: 18.02.2016
Сообщений: 771
|
||
| 28.06.2021, 16:53 [ТС] | ||
|
Элд Хасп, Очень извинюсь не мог этим заняться.
Получается просто переношу свойства и методы, которые что-то с ними делают в отдельный класс? А как тогда привязать сразу 2 класса в датаконтекст? или в контекст панелей просто нужно? И еще 1 вопрос если можно. Сейчас в UC Поста vm одна на все посты. При переключении меняется только id внутри и данные под этот id приходят. Может лучше при переключении создавать новую vm каждый раз? Прежде чем что-то делать дальше, хотелось бы привести все в нормальный вид. Вы как гуру wpf могли бы помочь указать на ошибки и подтолкнуть на путь для решения?
0
|
||
| 28.06.2021, 16:53 | |
|
MVVM Model в MVVM Mvvm datagrid ef WPF MVVM MVVM патерн Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
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 и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|