170 похожих чатов

Добрый вечер, направьте в нужную сторону, пожалуйста. Разбираюсь в MVVM,

не могу понять, как должна выглядеть правильная реализация вот такого варианта. При запуске приложения во вью 2 поля ввода, пользователь вводит данные(не авторизация) и по Ок переходит на следующую вью, там уже привязана к VM и пользуется данными полученными ранее. Не понимаю, как должна выглядеть передача данных, чтобы никто толком не знал друг о друге. Читал про локатор и мессенджер, но мессенджер вроде как слишком сильная связь. Возможно локатор это то что мне требуется, но не уверен. И ещё, не очень понимаю, в принципе у меня будет только одна модель в проекте, нужно ли для стартовой вью создавать отдельную модель которая будет просто дублировать нужные поля из основной модели?

11 ответов

18 просмотров

Vm нужна либо для каждой вью, либо одна на обе, для передачи данных можешь создать промежуточную Vm которую унаследуешь в остальных Есть много вариантов обвязок, и знание одной Vm о другой не нарушает Mvvm Mvvm отвязывает логику BLL от View

И главное в мввм - CodeBehind плохой подход на любом этапе разработки

Если ты вообще только начал, то на ранних этапах разработки инициализация одной vm в другой не будет плохим тоном, потом можешь тренироваться с иными способами, автофак и тд

Александр-Сотула Автор вопроса
Georgii Dankov
Если ты вообще только начал, то на ранних этапах р...

Да, только начал, пока 2 проекта маленьких сделал, но там все в одну вью укладывал, или вызывал дочерние(меню -> окно пункта меню), но там писал "типа" диспетчера окон и ни о какой передаче данных не шла речь,

Александр-Сотула Автор вопроса
Georgii Dankov
Если ты вообще только начал, то на ранних этапах р...

а все таки, вне зависимости от того, только начал или нет, как будет правильнее такое организовать, мне не хочется учиться на плохой практике, хочется как надо, пусть и путь будет сложнее =)

Александр Сотула
а все таки, вне зависимости от того, только начал ...

Я делаю единый ViewModelBase в котором реализация INotifyPropertyChanged и всякие свойства которые являются общими для нескольких VM, базовый Vm нужно регать в автофаке как синглтон и от него наследовать все VM

Александр Сотула
а все таки, вне зависимости от того, только начал ...

Ещё можно обвязать дополнительно NotificationPipes, это реализация паттерна Observer, удобно вешать триггеры и ловить изменения свойств

Александр-Сотула Автор вопроса
Georgii Dankov
Ещё можно обвязать дополнительно NotificationPipes...

я вот еще читал, мне показалось уместным воспользоваться паттерном Mediator, я так понимаю, что они очень схожи, но по описанию он как раз то что нужно, дает слабую связь, и пишут, что многие фреймворки берут именно его за основу. Но в любом случае, это самый верный подход, некая сущность, которая связывает в себе все остальное?

Александр Сотула
я вот еще читал, мне показалось уместным воспользо...

NotificationPipes то же самое, по сути, ты прослушиваешь определенную точку (метод, свойство) в нем, а кто-то пушит в эту точку какие-либо данные, или просто вызывает. Соответственно подписчик будет ловить этот триггер

Александр-Сотула Автор вопроса
Georgii Dankov
NotificationPipes то же самое, по сути, ты прослуш...

Спасибо большое, теперь понятно в какую сторону копать =) буду теперь разбираться в правильной реализации =)

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта