Урок номер 1: изучаем букву А Урок номер 2: Учимся писать букву А Урок номер 3: Берём бозон Хиггса и рассчитываем массу частицы атома протонной звёзды, имея параметр полёта баллистической кривой в синусоидой плоскости без расчета угла искажения преломляющегося отражения от рефрактора гиперболы. Это так выглядит для начинающих.
На самом деле , если переписать код в студию и потыкаться в него так - сяк , то (при наличии хоть мало мальски чугунной задницы) становится более - менее понятно
@@zayarniy Ну я на шарпе работаю уже год, WPF юзаю чуть меньше. Но большая часть работы MVVM для меня магия ) Реализовать, то я реализую. Но как оно передаётся - мозги сворачиваются - хотя тут всё просто.
Раньше не любил MVVM и думал что это сложно и не было желания изучать эту технологию, но после этого видео всё стало понятно и легко.Спасибо тебе за видосы)
Ты конечно объясняешь нормально. Но не придаешь значение объяснить от куда и куда идут фалы... создал класс а где создал как подключил сиди гадай.... Хотя бы солюшен эксплорер бы не прятал. И model так и не задействовал(и целой картины работы mvvm не складывается) общая суть улавливается и то из за какого то багажа знаний. А в целом реализацию шаблона так и не обьяснил.
Братишка, никогда больше не обрезай так окна, ничерта же не понятно что где находится. У нас у всех мониторы, на которых мы видим VS так же, как ты. Не надо этого, пожалуйста.
ну по идее он же объяснил изначально где что находится, когда было введение рассказывающее что такое MVVM - логика в Models, в ViewModels лежит класс или набор классов отвечающих за передачу данных из модели в интерфейс и наоборот, в Views - лежит интерфейс. просто он обрезал чтобы код был более читаем. Да знаю что я отвечаю на коммент двухлетней давности.
@@TheRealNisem Да, я этот коммент писал тогда, когда делал тестовое задание для принятия на стажировку. Сейчас я уже мидл и сам пишу архитектурные обучалки. Не очень актуально.)
BaseVM у автора - класс содержащий реализацию INotifyPropertyChanged. Он от него наследуется. просто до этого он наследовался напрямую от INotifyPropertyChanged и реализацию выполнял внутри класса MainViewModel. вы не заметили что реализация исчезла из класса MainViewModel и оставили ее там по этому у вас все работает если оставить наследование от INotifyPropertyChanged.
Я везде вижу примеры MVVM с использованием простых данных типа вывода числа или созданием простой модели в конструкторе, а вот с использованием вытянутых данных из БД, нигде не могу найти нормальные примеры. Если мы например вытягиваем данные с помощью DataSet в Table, нужно ли делать отдельную модель которая будет описывать содержимое Table и потом на основе данных из Table создавать коллекцию моделей которая поддерживает привязки? Или мы просто будем использовать Table или его DefaulView во ViewModel?
Да, нужно будет описать модель таблицы, потом с БД заполнять эту модель и далее работать с коллекцией, которую ты заполнил и забнидил. Подробнее: metanit.com/sharp/wpf/22.1.php
И лучше бы научиться работать с EntityFramework, он ускорит процесс работы в разы + представит твои таблицы автоматически в виде моделей, останется только с помощью linq + sql с ними работать.
Ну вот смотришь и что нового? это то что в xml биндишься на свойство, а по факту тоже самое можно сделать delegate + event + invoke. В чем приемущество? Даже тот же инвок вызывается для того чтоб из другого потока обратиться. DataContext я бы трактовал как delegate + event а подписка это path=value На WidowsForms это можно сделать так: class Class1{ delegate void Show(int value); public event EventShow; int Counter = 0; public Class1() { new Task(()=> { EventShow?.Invoke(Counter ++); }).Start(); } } class Form1{ public Form1(){ Class1 class1 = new Class1() class1.EventShow += EventShow; } private void EventShow(int value) { textBox1.Text = value; } }
@@BashkaMen Я к тому что это не облегчает написание кода, по структуре тоже самое только привязка либо в коде либо в xml. Чем так хвалят этот Binding... Если между контролами то да не нужно даже залазить в код все в xml.
@@SuperWolchara хвалят тем что с тебя снимается челый кусок работы - работа с стейтои UI (выключить кнопку, включить) обновить значение текстбокса и тд
Суть в том, что при таком подходе к разработке у тебя есть разделение на КОД и ДИЗАЙН. Т.е., если ты программист, что часть работы ты с себя можешь скинуть на дизайнера, который по ТЗ накидает интерфейс, настроит взаимодействие и предоставит тебе в итоге готовый интерфейс (я так понял, для этого нужна программа Blend), к которому можно будет прикрутить логику в виде кода непосредственно. Конечно, когда проектик небольшой и/или ты сам себе заказчик, про это вообще не думаешь. Но здесь всё упирается в удобство и скорость. И конечно, никто не запрещает пользоваться дедовскими методами. Однако, если проект большой, где ты уже не один, важно придерживаться какой-то общей концепции, которая всем упростит задачу. Вот и придумывают всякие паттерны проектирования, библиотеки, фреймворки и т.д. В общем, из нового здесь только подход к разработке. А в 2021 и далее будут очередные изменения. WinUI 3, MAUI, Uno Platform, Project Reunion.
Спасибо, очень помог. У меня вопрос: если View не должна знать о ViewModel, и ViewModel не должна знать о View, как тогда во View вывести список объектов (1: название, цена; 2: название, цена; ...)? Ведь эти поля придется создавать динамически, но View не знает о данных, а ViewModel не знает о View и переслать ему пару объектов не может.
Непонятно, откуда взялся интерфейс BaseVM, отсюда ничего непонятно. В целом видос полезный, но это скорее 13 минут для того, чтобы записать себе вопросы, которые потом нужно нагуглить.
Это во первых не то же самое что в формах( если подразумевать под формами программирование как попало без структуризации проекта). Это паттерн который позволяет подразделить проект на некоторое количество частей. В данном случае 3. В этом проще разобраться чем в такой же по функционалу программе но написанной тяп ляп, а еще такая реализация позволяет вообще отбросить нафиг интерфейс. можно убрать XAML и написать интерфейс на HTML и будет все прекрасно работать без изменения логики. ( коммент скорее не для автора а для будующих поколений, так как автор я думаю за 10 месяцев разобрался с тем для чего нужен MVVM и другие паттерны а так же WPF)
тупой блогер, половина кода вообще остаётся за кадром, кому нахрен нужны такие объяснения, когда не понятна структура проекта! Мальчик, не занимайся не своим делом!
Господи, откуда вы такие беретесь? Юноша, усвойте одно - никто вам здесь ничем не обязан. Нравится смотрите. Не нравится, идете мимо. А то сидите только на диване и обсираете. Всегда нужно оставаться людьми. Если не нравится реализация в видео каких-то моментов, то можно просто по-человечески об этом написать и автор примет это к сведению при создании будущих видео.
Сложность возникнет когда твой интерфейс приложения смешается бизнес-логикой (функциями, которые например берут данные с БД). MVVM даёт возможность отделить логическую часть от интерфейса, если тебе нужно будет дописать какой то функционал ты залезешь ModelView и там допишешь команды.
короче хрень, учитель из тебя херовый я так и не понял порядок написания что куда от куда пишется оч разочарован, думал всё по порядку расскажешь , не , только диз
Думать надо учится. думать. ролик полезный. конечно объяснено все достаточно сухо но понять можно. Я сам пересмотрел несколько раз но вник в тему и даже смог ответить людям на вопросы в комментариях.
Смотрел это видео 2 года назад. Непонятно о чем хочет донести челик. Ужасные примеры и повествование. Пересматриваю сейчас - абсолютно то же самое чуство. Цель была не научить - а выпендриться, хз как это назвать. В MVVM может въехать даже человек не дошедший до событий и делегатов, есть живые примеры.
Урок номер 1: изучаем букву А
Урок номер 2: Учимся писать букву А
Урок номер 3: Берём бозон Хиггса и рассчитываем массу частицы атома протонной звёзды, имея параметр полёта баллистической кривой в синусоидой плоскости без расчета угла искажения преломляющегося отражения от рефрактора гиперболы. Это так выглядит для начинающих.
На самом деле , если переписать код в студию и потыкаться в него так - сяк , то (при наличии хоть мало мальски чугунной задницы) становится более - менее понятно
На самом деле использование MVVM подразумевает хорошее знание C#. Это мощная технология, но она требует не маленьких начальных знаний.
Ха-ха-ха... ЗАЧЕТ ))
@@zayarniy Ну я на шарпе работаю уже год, WPF юзаю чуть меньше. Но большая часть работы MVVM для меня магия ) Реализовать, то я реализую. Но как оно передаётся - мозги сворачиваются - хотя тут всё просто.
стоп, если третий урок это текущий - то я Вам не завидую
я понял всё не смотря предыдущие
Раньше не любил MVVM и думал что это сложно и не было желания изучать эту технологию, но после этого видео всё стало понятно и легко.Спасибо тебе за видосы)
Посмотрел несколько ваших видео , по началу как то настороженно отнёсся к методам ,но сейчас считаю что это одни из лучших видео-уроков по теме WPF
Спасибо, приятно
Ты конечно объясняешь нормально. Но не придаешь значение объяснить от куда и куда идут фалы... создал класс а где создал как подключил сиди гадай....
Хотя бы солюшен эксплорер бы не прятал.
И model так и не задействовал(и целой картины работы mvvm не складывается) общая суть улавливается и то из за какого то багажа знаний. А в целом реализацию шаблона так и не обьяснил.
Вот именно. Без модели этот видос не стоит ничего
Братишка, никогда больше не обрезай так окна, ничерта же не понятно что где находится. У нас у всех мониторы, на которых мы видим VS так же, как ты. Не надо этого, пожалуйста.
ну по идее он же объяснил изначально где что находится, когда было введение рассказывающее что такое MVVM - логика в Models, в ViewModels лежит класс или набор классов отвечающих за передачу данных из модели в интерфейс и наоборот, в Views - лежит интерфейс. просто он обрезал чтобы код был более читаем. Да знаю что я отвечаю на коммент двухлетней давности.
@@TheRealNisem Да, я этот коммент писал тогда, когда делал тестовое задание для принятия на стажировку. Сейчас я уже мидл и сам пишу архитектурные обучалки. Не очень актуально.)
@@AlexCSharp как собеседование прошло ?
@@СергейЦветов-н4н Да как, то да сё, тестовое дали, на мотивацию посмотрели, кое как сделал, предложили оплачиваемую стажировку, да и всё.)
@@AlexCSharp ,хмм ,понял ,спасибо ,я думал на стажировке ещё вопросы спрашивают 😅, сижу старое повторяю ,новое учу
11:15 раньше класс наследовался от INotifyPropertyChanged, а теперь от BaseVM, причем оставив INotifyPropertyChanged, все работает
BaseVM у автора - класс содержащий реализацию INotifyPropertyChanged. Он от него наследуется. просто до этого он наследовался напрямую от INotifyPropertyChanged и реализацию выполнял внутри класса MainViewModel. вы не заметили что реализация исчезла из класса MainViewModel и оставили ее там по этому у вас все работает если оставить наследование от INotifyPropertyChanged.
смотрел 3 месяца назад ничего не понял , посмотрел сейчас и все понял . Magic
Я так и не увидел связь model и viewmodel. Где же она?
Я везде вижу примеры MVVM с использованием простых данных типа вывода числа или созданием простой модели в конструкторе, а вот с использованием вытянутых данных из БД, нигде не могу найти нормальные примеры. Если мы например вытягиваем данные с помощью DataSet в Table, нужно ли делать отдельную модель которая будет описывать содержимое Table и потом на основе данных из Table создавать коллекцию моделей которая поддерживает привязки? Или мы просто будем использовать Table или его DefaulView во ViewModel?
Да, нужно будет описать модель таблицы, потом с БД заполнять эту модель и далее работать с коллекцией, которую ты заполнил и забнидил. Подробнее: metanit.com/sharp/wpf/22.1.php
И лучше бы научиться работать с EntityFramework, он ускорит процесс работы в разы + представит твои таблицы автоматически в виде моделей, останется только с помощью linq + sql с ними работать.
Как сказала Баба Зина, BashkaMen большая сила!
хороший урок, только просьба в следующий раз показывай изменения в файлах, а так очень интересно смотреть
6:55 свойство необязательно должно иметь и get и set. Достаточно одного из них, чтобы поле стало свойством.
Свойство обязательно имеер геттер и сеттер.
Просто в озвученном Вами варианте второй не виден (не прописан)
@@dimapanasenko5111, есть поля без свойств. Если не знаешь - не пиши.
@@exys2086 не надо называть свойства полями, пожалуйста. В видео, кстати, тоже ошибка.
Поле - это переменная. Свойство - это метод.
Молодцы! Отличный пример. Нет лишней воды. Очень все живо и понятно.
На гитХабе нет кода этого проекта с MVVM... (((
Это единственное нормальное видео по mvvm. Спасибо друг, снимай дальше.
спасибо :)
@@BashkaMen
11:29
о содержимом свойства "Clicks" которое занимает 11 строк мы, как я понимаю, должны догадаться сами
дизлайк
@@BashkaMen откуда взялся класс BaseVM - тоже непонятно
@@JoeSmith-ll9yn 5:00 функция Click
@@BashkaMen это действительно хорошее видео. Много смотрел примеров, объяснений, но только твой ролик понял
12:25, ты пишешь, что clicks меньше десяти в условии, однако программа разрешает делать 10 клик, почему?
А
Начало с 0
@@zayarniy вот я тупой ) Видимо устал к тому времени, как смотрел видос этот ) Этож начало начал, все с 0 идет, и знаю же это )
Ну вот смотришь и что нового? это то что в xml биндишься на свойство, а по факту тоже самое можно сделать delegate + event + invoke. В чем приемущество? Даже тот же инвок вызывается для того чтоб из другого потока обратиться. DataContext я бы трактовал как delegate + event а подписка это path=value
На WidowsForms это можно сделать так:
class Class1{
delegate void Show(int value);
public event EventShow;
int Counter = 0;
public Class1()
{
new Task(()=>
{
EventShow?.Invoke(Counter ++);
}).Start();
}
}
class Form1{
public Form1(){
Class1 class1 = new Class1()
class1.EventShow += EventShow;
}
private void EventShow(int value)
{
textBox1.Text = value;
}
}
Очень читаемо, класс!
А я буду использовать то что нормально читается :)
Я вроде в видео не говорил что самому биндинг сделать нельзя
@@BashkaMen Я к тому что это не облегчает написание кода, по структуре тоже самое только привязка либо в коде либо в xml. Чем так хвалят этот Binding... Если между контролами то да не нужно даже залазить в код все в xml.
@@SuperWolchara хвалят тем что с тебя снимается челый кусок работы - работа с стейтои UI (выключить кнопку, включить) обновить значение текстбокса и тд
Суть в том, что при таком подходе к разработке у тебя есть разделение на КОД и ДИЗАЙН. Т.е., если ты программист, что часть работы ты с себя можешь скинуть на дизайнера, который по ТЗ накидает интерфейс, настроит взаимодействие и предоставит тебе в итоге готовый интерфейс (я так понял, для этого нужна программа Blend), к которому можно будет прикрутить логику в виде кода непосредственно. Конечно, когда проектик небольшой и/или ты сам себе заказчик, про это вообще не думаешь. Но здесь всё упирается в удобство и скорость. И конечно, никто не запрещает пользоваться дедовскими методами. Однако, если проект большой, где ты уже не один, важно придерживаться какой-то общей концепции, которая всем упростит задачу. Вот и придумывают всякие паттерны проектирования, библиотеки, фреймворки и т.д.
В общем, из нового здесь только подход к разработке. А в 2021 и далее будут очередные изменения. WinUI 3, MAUI, Uno Platform, Project Reunion.
Спасибо за видос. Давно не кодил на wpf и видео очень хорошо освежает память
НАРОД!!! этот урок надо пересмотреть пару раз и тогда все будет понятно!!!!!
Нихуя не понятно, но очень интересно!!!
Я так понимаю, что количество кликов нужно все же поместить в модель? И как потом правильно соединить модель и вьюмодель?
В модели, кроме свойств, вообще ничего не должно быть, по-хорошему. Логикой должна заниматься модель представления (view model).
Big like
Я знаю что 4 года ) но если можешь то ответь . У меня вопрос , а как в viewmodel реализовать все event , ну припустим я хочу pointermove
спасибо за видео только просьба показывать все экран монитора, что бы было видно что и где открыто
От интерфейсов *не наследуются* , их *реализуют*
Спасибо, очень помог. У меня вопрос: если View не должна знать о ViewModel, и ViewModel не должна знать о View, как тогда во View вывести список объектов (1: название, цена; 2: название, цена; ...)? Ведь эти поля придется создавать динамически, но View не знает о данных, а ViewModel не знает о View и переслать ему пару объектов не может.
View знает о ViewModel и биндингами на нее привязывается
рефРакторинг?
Ну.. какбы.. типа...
Непонятно, откуда взялся интерфейс BaseVM, отсюда ничего непонятно. В целом видос полезный, но это скорее 13 минут для того, чтобы записать себе вопросы, которые потом нужно нагуглить.
Чет если по видосу судить- муть полная. Что бы сделать тоже самое что в формах, надо пукнуть крякнуть, написать кучу непонятного кода. Хрень какая то
Это во первых не то же самое что в формах( если подразумевать под формами программирование как попало без структуризации проекта). Это паттерн который позволяет подразделить проект на некоторое количество частей. В данном случае 3. В этом проще разобраться чем в такой же по функционалу программе но написанной тяп ляп, а еще такая реализация позволяет вообще отбросить нафиг интерфейс. можно убрать XAML и написать интерфейс на HTML и будет все прекрасно работать без изменения логики. ( коммент скорее не для автора а для будующих поколений, так как автор я думаю за 10 месяцев разобрался с тем для чего нужен MVVM и другие паттерны а так же WPF)
жаль что чтобы понять видео нужно пересмотреть его много раз
тупой блогер, половина кода вообще остаётся за кадром, кому нахрен нужны такие объяснения, когда не понятна структура проекта! Мальчик, не занимайся не своим делом!
Господи, откуда вы такие беретесь?
Юноша, усвойте одно - никто вам здесь ничем не обязан. Нравится смотрите. Не нравится, идете мимо.
А то сидите только на диване и обсираете.
Всегда нужно оставаться людьми. Если не нравится реализация в видео каких-то моментов, то можно просто по-человечески об этом написать и автор примет это к сведению при создании будущих видео.
ничего не понятно(
Брат) подскажи пожалуйста, как ты такую подсветку кода сделал. Очень удобная!!!
MinSoc Trud studiostyl.es/schemes/desertex-revised
@@BashkaMen сердечно благодарен!) Видео позволили за два дня войти в курс дела с WPF!
Но я так понял, что это не работает для VS2017 ... или только у меня?
клик ад, а видео полезное
а где hacking
за 13 минут рассказать о MVVM ?! Ну ты вообще молодец какой...
Кому то нужно пол года на изучение ПАТТЕРНА?
все как то скомкано с кучей запинок, будто сам не уверен в том, что ты делаешь, лично я понял только принцип модели, и то потому что загуглил до этого
не не понимаю я этот mvvm зачем все так усложнять
Сложность возникнет когда твой интерфейс приложения смешается бизнес-логикой (функциями, которые например берут данные с БД). MVVM даёт возможность отделить логическую часть от интерфейса, если тебе нужно будет дописать какой то функционал ты залезешь ModelView и там допишешь команды.
кошмар
Че ты делаешь где тут дата ничего не понятно какие-то () => что это вообще такое
Monich лямбда выражения. Ты сам виноват в том, что тупой
Monich че
Что ты на впф забыл, если не знаешь о () => смешной
11:29
о содержимом свойства "Clicks" которое занимает 11 строк мы, как я понимаю, должны догадаться сами
дизлайк
в самом начале видео было показано, что там
не рефракторинг, а реФАКТОРинг. видео ни о чем, как учебное не катит совсем
ааа, господи, я сидел не мог понять что это за слово, а это рефакторинг ахахах
Обьясняет как будто все понимают язык школоты
что?
@@BashkaMen моя не понимать кринж этого попита
короче хрень, учитель из тебя херовый я так и не понял порядок написания что куда от куда пишется оч разочарован, думал всё по порядку расскажешь , не , только диз
Думать надо учится. думать. ролик полезный. конечно объяснено все достаточно сухо но понять можно. Я сам пересмотрел несколько раз но вник в тему и даже смог ответить людям на вопросы в комментариях.
Смотрел это видео 2 года назад. Непонятно о чем хочет донести челик. Ужасные примеры и повествование.
Пересматриваю сейчас - абсолютно то же самое чуство.
Цель была не научить - а выпендриться, хз как это назвать.
В MVVM может въехать даже человек не дошедший до событий и делегатов, есть живые примеры.
У нас в чате другое мнение