No video

WPF+MVVM часть 1/14 - Начало, архитектура проекта, основные элементы MVVM своими руками

  Рет қаралды 94,332

Павел Шмачилин

Павел Шмачилин

Күн бұрын

Пікірлер: 239
@arif1984may
@arif1984may 7 ай бұрын
огромная благодарность! такие уроки на вес золота, а Вы бесплатно со всеми поделились знаниями, дай Бог Вам здоровья! Чтобы Вы встретили таких же добрых людей, как и Вы сами!
@hrandron
@hrandron 3 жыл бұрын
Я начинающий (пилю программу для управления и вывода данных на ПК из самодельного устройства). Столько перечитал инфу в инете, столько пересмотрел роликов на ютубе, но только у вас наконец-тось понял что такое привязка, как создавать команды. Спасибо.
@someelse989
@someelse989 4 жыл бұрын
Какая редкость, контент на подобную тему, ну очень мало. Павел, спасибо!
@Shmachilin
@Shmachilin 4 жыл бұрын
Сам собирал по крупицам...
@uporka6924
@uporka6924 2 жыл бұрын
Согласен, давно искал что то подобное.
@aRRma99
@aRRma99 4 жыл бұрын
Это реально шедевр!!! Самое лучшее что можно посмотреть по WPF+MVVM в ру сегменте!!
@dmitriialeksandrovich4565
@dmitriialeksandrovich4565 2 жыл бұрын
+++
@10011byrbon
@10011byrbon Жыл бұрын
В этом плейлисте чуть ли не 50 часов лекций. Столько материала, что аж страшно) Хочется все изучить, но так как новичок, то дается сложновато пока. Буду ковырять помаленьку, спасибо за такой контент.
@konstantinewhite614
@konstantinewhite614 4 жыл бұрын
Спасибо! Наверно лучший материал по данной тематике, по крайней мере в Ru-нете!
@yanus174
@yanus174 4 жыл бұрын
2:20 Настройка студии VS 6:30 Настройка Visual studio code 14:25 Создание локального репозитория, и публикация в GIT 27:01 Создание инфраструктуры приложения MVVM 33:00 Пример MVVM приложений 40:00 Готовые Nuget пакеты MVVM 41:15 MVVM Prism 42:30 Базовый класс модели представления 51:00 Основная модель представления, для главного окна 51:55 Добавляем интерфейс IDisposable к классу ViewModel для примера реализации 1:01:30 Binding модели представления в xaml 1:46:00 Создание новой ветви из коммита 1:53:00 Создание кнопки MVVM 2:02:00 Базовый класс команды 2:09:00 Создание команды ЛямдаКоманд (Павел так ее называет) 2:17:00 описание команды в модели отображения 2:22:16 Определение отдельной команды 2:37:00 Привязка команд к объектам WPF, которые не поддерживают команды 2:42:00 Вынос команд в отдельные ресурсы 2:46:00 Иконки как шрифт (классная тема, если бы не увидел, не поверил бы) 2:58:00 Material Design 3:08:00 Http запросы 3:19:25 Построчное извлечение данных из источника, если объем информации большой 3:32:19 Извлечение данных в виде кортежа 3:47:08 Модели данных MVVM 3:53:00 OxyPlot WPF
@ssayless
@ssayless 2 жыл бұрын
Полный курс по WPF с прекрасными сопровождающими комментариями, примерами, да еще и бесплатно! Год копаюсь в данной теме и это определенно лучший материал. Спасибо огромное за такой титанический труд!
@Shmachilin
@Shmachilin 2 жыл бұрын
Буду рад если Вам это пригодится и Вы, в свою очередь, научите этому кого-то.
@netaihelder
@netaihelder Жыл бұрын
@@Shmachilin aanssmAssad'ssaananrashassdnaads NVqamaskssans Asasnannnnnnnannnmnnnnn
@netaihelder
@netaihelder Жыл бұрын
7ga
@netaihelder
@netaihelder Жыл бұрын
7ga
@user-nw1jq3ie9t
@user-nw1jq3ie9t 4 жыл бұрын
Живешь такой, потихоньку ковыряешь C#, заказы на фрилансе небольшие делаешь по фану. Думаешь, "вроде как, я программист". Ага. Посмотрел 4 часа на одном дыхании, и понял, что тебя обоссали ))) Если без шуток, огромная благодарность за контент! Столько моментов раскрыто, доселе неведомых.
@Shmachilin
@Shmachilin 4 жыл бұрын
А сколько у меня таких моментов было с подобным ощущением... и сколько ещё будет...
@evilgamer2503
@evilgamer2503 7 ай бұрын
Это я когда на работу в ит пришел
@TheKanstantsin
@TheKanstantsin 3 жыл бұрын
Павел, огромнейшее спасибо и благодарность. Очень крутой материал! По данной тематике его вообще в принципе очень мало и практически невозможно собрать все в единое целое, а здесь все как на ладони, причем на открытой ладони, не зажато в кулачке)))))). Необыкновенная щедрость!)))
@Shmachilin
@Shmachilin 3 жыл бұрын
Пишите вопросы.
@fumbo9899
@fumbo9899 2 жыл бұрын
С такими знаниями, вам вполне можно создавать свои платные курсы по обучению людей. Код на высшем уровне)
@argentmize
@argentmize 3 жыл бұрын
В кои-то веки ютуб нормальный ролик порекомендовал. Жаль только намного позже, чем это было нужно. Был вынужден начать с mvvm light, чтобы доделать программу, теперь вернулся к дефолтному wpf,и эти записи очень кстати, чтобы разобраться в кишках 😁
@oldschool2445
@oldschool2445 3 жыл бұрын
Огромное спасибо! Очень крутой материал, аж голова распухла )) Вдумчиво разбирал лекцию 2 дня, чтобы всё запомнить и потренироваться. Буду смотреть следующие. Просто информационный клад.
@Shmachilin
@Shmachilin 3 жыл бұрын
У кого-то же хватает терпения всё это просмотреть...
@user-ez3un5nh9r
@user-ez3un5nh9r Жыл бұрын
@@Shmachilin Получаю огромное удовольствие, от души благодарю!
@MagistrTNT
@MagistrTNT 3 жыл бұрын
Это лучшие видео по теме из всего , что я видел!!! Особое спасибо за науку по правильной организации структуры проекта.
@suiqrim
@suiqrim 2 жыл бұрын
Большое спасибо за целую серию очень полезных видео. Никак не мог понять патерн MVVM, но ваши видео очень помогли мне и я достаточно быстро освоился. Ещё бонусом к MVVM досталась настройка дизайна разных элементов WPF.
@positivemoody
@positivemoody 3 жыл бұрын
Какой вы молодец проводить уроки по средствам трансляции в Ютубе.
@ЯГречка
@ЯГречка 3 жыл бұрын
Вот просто спасибо, что ты есть, Павел! Спасибо, что ты создал канал на ютубе! Спасибо, что ты записал видосы по MVVM! 3 дня убил на то чтобы разобраться с тем как привязать коллекцию к DataGrid и просто вот сделал привязку к заголовку как ты и по альтернативе к коллекции и все чудесным образом заработало СПАСИБО!
@user-hv8kp2oh6f
@user-hv8kp2oh6f 3 жыл бұрын
Спасибо большое! Достаточно подробно, но о многом, с пояснениями и доходчиво! Большая благодарность!
@bonintimo
@bonintimo 3 жыл бұрын
Просмотр ОТ и ДО, т.е. ВСЕ %) Лайк за работу!
@xzenter
@xzenter 3 жыл бұрын
Большое спасибо! Лучший мастер класс и не только по MVVM! Ваш труд мне очень помог, желаю успехов.
@user-ex7eh4js9o
@user-ex7eh4js9o 2 жыл бұрын
Внесу свои пять копеек. Огромное спасибо за такой материал. Понравилось, что вначале был разбор инфраструктуры проекта. Вообще, тема архитектуры это еще на целый стрим в 5 часов потянет). Еще раз благодарю.
@nikitaisyuk8630
@nikitaisyuk8630 3 жыл бұрын
Очень рад что нашел настолько подробное видео по данной теме. Спасибо!)
@gredar77
@gredar77 2 жыл бұрын
Спасибо вам огромное. Много моментов, которые были непонятны при изучении построения приложений с помощью WPF в рамках MVVM, становятся ясны. Подача очень приятная.
@VyacheslavTamplier
@VyacheslavTamplier 2 жыл бұрын
Павел, огромное спасибо за такой замечательный материал! На русском (да, и возможно, на английском) не найти такой подробный разбор паттерна MVVM в сети интернет, имхо. Также Вы довольно подробно разбираете другие аспекты разработки ПО, настолько комплексного подхода я еще не видел, и воды по минимуму, только самое необходимое с полезными отвлечениями! Продолжайте в том же духе и у Вас всегда будет благодарный слушатель-программист. По прошествии времени появился еще один момент, при котором программа сваливается в исключение. Появились регионы в названии которых тоже присутствует запятая, это - "Saint Helena, Ascension and Tristan da Cunha" и "Bonaire, Sint Eustatius and Saba", надо и их учитывать при парсинге csv-файла. Это для тех, кто столкнется с этой проблемой в настоящем и будущем.
@Shmachilin
@Shmachilin 2 жыл бұрын
По ходу надо отдельным стримом делать нормальный парсер csv.
@VyacheslavTamplier
@VyacheslavTamplier 2 жыл бұрын
​@@Shmachilin Вариант решения проблемы использовать регулярные выражения (может не лучший вариант, но рабочий). Добавить паттерн pattern, метод ParseStringCSV и немного изменить методы GetDates() и GetData(): private const string pattern = @",(?=\S)"; //..... private static String[] ParseStringCSV(string input, string pattern) => Regex.Split(input, pattern); private static DateTime[] GetDates() => ParseStringCSV(GetDataLines().First().ToString(), pattern) .Skip(4) .Select(s => DateTime.Parse(s, CultureInfo.InvariantCulture)) .ToArray(); private static IEnumerable GetData() { var lines = GetDataLines() .Skip(1); foreach (var line in lines) { var row = ParseStringCSV(line, pattern); var province_name = row[0].Trim(); var country_name = row[1].Trim(' ', '"'); var counts_many = row.Skip(4).Select(int.Parse).ToArray(); yield return (country_name, province_name, counts_many); } }
@f.ingenia
@f.ingenia 3 жыл бұрын
Павел благодарю! Отлично всё объясняете. Очень полезное видео.
@user-ed5zh5sl3s
@user-ed5zh5sl3s 3 жыл бұрын
Отличная подача материала. Спасибо!
@Blackfoxx797
@Blackfoxx797 2 жыл бұрын
Просто клад нашла!! Здорово. Спасибо. Разбираюсь в лекции) После разбора иду дальше смотреть
@user-lv3sy9zx3d
@user-lv3sy9zx3d 2 жыл бұрын
Очень крутой вебинар! Собираюсь посмотреть все видео по wpf mvvm
@zheltov_aleksey
@zheltov_aleksey 4 жыл бұрын
Очень круто ! Спасибо тебе
@alexkot9849
@alexkot9849 Жыл бұрын
Спасибо Дмитрий за Ваш урок!
@maxsoul757
@maxsoul757 Жыл бұрын
вау, я наткнулся на потрясный контент, спасибо!
@remontunasdotru
@remontunasdotru 2 жыл бұрын
Спасибо вам за объяснение. Все кристально понятно!
@Serhii_lolovich
@Serhii_lolovich 3 жыл бұрын
Очень помогло понять mvvm, спасибо
@toshmatov
@toshmatov Жыл бұрын
Очень достойно, благодарю за уроки!
@user-vg6gu8hc6w
@user-vg6gu8hc6w 4 жыл бұрын
Бро круто! лайк и подписка однозначно! не останавливайся
@Shmachilin
@Shmachilin 4 жыл бұрын
Благодарю!
@user-vg6gu8hc6w
@user-vg6gu8hc6w 4 жыл бұрын
@@Shmachilin Единственное с начала 3 часа понял что урок для новичка сложноват ( Просто повторяю не понимая зачем это делается... И даже не понимаю имеет ли смысл смотреть дальше при таком раскладе... Ибо инфа из за непонимание объемной картины в целом просто не усваивается (((
@Shmachilin
@Shmachilin 4 жыл бұрын
Есть такое. Скорее это для тех, кто уже не пугается конструкций языка, успел поработать с WinForms и слышал что такое паттерны проектирования.
@user-vg6gu8hc6w
@user-vg6gu8hc6w 4 жыл бұрын
@@Shmachilin посмотрев примеры попроще и со второго захода с осмыслением дошёл до 3 часа! Хочу сказать что контент бомба! На других видео либо умышленно, либо по незнанию упускаю много мелочей,. С тем же биндингом, Прям спасибо большое ещё раз за такую годноту !
@Shmachilin
@Shmachilin 4 жыл бұрын
@@user-vg6gu8hc6w задавайте вопросы! А то скучно...
@23tmsektant
@23tmsektant 2 жыл бұрын
Спасибо за контент)Посмотрел пока что первую часть(и повторил конечно же её) Очень доступно рассказываете)
@Shmachilin
@Shmachilin 2 жыл бұрын
С csv проблем не возникло?
@23tmsektant
@23tmsektant 2 жыл бұрын
@@Shmachilin нет.Проблема была с графиком, т.к. последняя версия OxyPlot.WPF ,видимо , значительно отличается от той,что была на видео.Код с видео на ней у меня не работал. Поэтому я установил старую версию пакета м все заработало)
@vyachgusev
@vyachgusev 8 ай бұрын
@@Shmachilin начал проходить ваши видео и как раз возникла ошибка "System.FormatException: "Unput string was not in a correct format" вот здесь "var counts = row.Skip(4).Select(int.Parse).ToArray();". Пока разобраться не удалось, в чем причина. Когда я полный 0, даже не удивляюсь..) Это тот момент, когда вы учите структурировать данные с гитхаба института
@vyachgusev
@vyachgusev 8 ай бұрын
Все, почитал комментарии, увидел, что там добавились данные, все получилось! Мне бы такого препода, как вы! А то у меня вообще все тухло с этим. Приходится самообразованием заниматься. Через полгода сдавать тему по диплому, а я то одно то другое смотрю и пробую учиться. В итоге понимания в программировании никакого совершенно. Надеюсь, что после ваших уроков я все таки смогу, что нибудь сделать и не лопухнуться... Спасибо ВАМ огромное!
@user-su9dx4wh6z
@user-su9dx4wh6z 7 ай бұрын
Шедеврально!!!!
@svetlanachernova9740
@svetlanachernova9740 2 жыл бұрын
Спасибо шикарное видео!!!! Очень полезное!
@yz777zhumabayev6
@yz777zhumabayev6 2 жыл бұрын
Спасибо за видео очень много интересного
@user-jd5yu5lc2k
@user-jd5yu5lc2k 3 жыл бұрын
Спасибо большое!
@user-ey8tv3pf7r
@user-ey8tv3pf7r 2 жыл бұрын
Спасибо за ролик , только не прекращайте выпускать ролики 🙏
@viruslab1
@viruslab1 3 жыл бұрын
все четко ))) узнал кое что новое
@mnocard
@mnocard 4 жыл бұрын
Очень круто! Спасибо!
@topProgrammer
@topProgrammer 3 жыл бұрын
Круто, спасибо за труд. Продолжай!
@betnews-8616
@betnews-8616 3 жыл бұрын
Вы очень круты!!! Спасибо большое!
@dmitriialeksandrovich4565
@dmitriialeksandrovich4565 2 жыл бұрын
Вы просто бог))
@Rueslan
@Rueslan 4 жыл бұрын
Действительно, хорошее изложение. Я ток начал учить мввм, это видео прям прояснило многие моменты. Но я понял что ничего не смыслю в программировании(
@Shmachilin
@Shmachilin 4 жыл бұрын
Когда-то я думал, что никогда и ни за что не буду программировать...
@PsychosocialBastard
@PsychosocialBastard 3 жыл бұрын
@@Shmachilin что изменилось?
@Shmachilin
@Shmachilin 3 жыл бұрын
Было время свободное и была книга (Delphi5 2000 год). Сел, вдумчиво прочитал... Потом был ВУЗ и вторая вышка по программированию.
@vyachgusev
@vyachgusev 8 ай бұрын
@@Shmachilin а сколько вам лет, когда вы начали программировать? я правильно понял, что первая вышка была не по программированию?
@Shmachilin
@Shmachilin 8 ай бұрын
@@vyachgusev Первая Вышка была по радиотехнике.
@pavelkross
@pavelkross 3 жыл бұрын
Спасибо! очень годный контент
@dreamr3371
@dreamr3371 3 жыл бұрын
Очень круто!
@eatpasta9763
@eatpasta9763 Ай бұрын
Наконец-то наткнулся на клад!
@McGewen
@McGewen 9 ай бұрын
СУПЕР!!!!
@Ayub_Yaqub
@Ayub_Yaqub 2 жыл бұрын
Класс спасибо
@kirillkuznetsov159
@kirillkuznetsov159 2 жыл бұрын
Cпасибо!
@rdragon587
@rdragon587 Жыл бұрын
Cool
@BraentR
@BraentR Жыл бұрын
Спасибо
@josbexerr5166
@josbexerr5166 3 жыл бұрын
Gracias Mister....saludos de los andes peruanos.... la próxima activa el subtitulo....
@BrooDRay
@BrooDRay Жыл бұрын
Огромнейшее спасибо за плейлист по WPF! Есть ли у вас аккаунт на бусти? Возможно кто-то захочет вас отблагодарить монеткой, если у них есть лишняя)
@animagnoa
@animagnoa 3 жыл бұрын
при установки компонентов в начале урока был момент с установкой компонента "Git для Windows" - если я поставлю этот пункт - инсталятор не по.ерит уже установленную ранее git систему поставленную с официального сайта git? или это совсем другое?
@Shmachilin
@Shmachilin 3 жыл бұрын
Вопрос хороший. Не пробовал. Обычно проблем с переустановкой Git в системе не возникало.
@andrevyakin
@andrevyakin 3 жыл бұрын
Спасибо за Ваш труд. Очень емко и информативно. Но решение в консольном проекте «yield return line.Replace("Korea,", "Korea -");» = костыль. Когда я изучал материал, в файле кроме Кореи появилась еще «Bonaire, Sint Eustatius and Saba» и все кранты. Вылетает с исключением. Полтора часа потратил, пока разобрался в чем дело и исправил 😊
@Shmachilin
@Shmachilin 3 жыл бұрын
Это не костыли. Это специально разложенные грабли!
@oldschool2445
@oldschool2445 3 жыл бұрын
Спасибо что написал в комментах, а то тоже после исключения полез сразу сюда посмотреть ))
@user-vg6gu8hc6w
@user-vg6gu8hc6w 3 жыл бұрын
А как исправили))? Дайте наводку))? Реплейс вначале через ковычки сделали почистили, а потом через запятую? Или сразу ковычки ловили через контейс и бегали от начальной до конечной, стирая/заменяя запятые?
@user-vg6gu8hc6w
@user-vg6gu8hc6w 3 жыл бұрын
@@oldschool2445 удалось исправить))?
@shagov25
@shagov25 2 жыл бұрын
рядом вот такие грабли положил) var i = 0; if (!int.TryParse(cell[4], out int res)) i = 1; var Counts = cell.Skip(4 + i).Select(int.Parse).ToArray();
@TheMilliardo
@TheMilliardo 3 жыл бұрын
Подскажите пожалуйсто как сделать команду для SelectedItem в ListView. А также если в также интиресует кнопка с коммандой внутри ItemTemplate listview что бы удалить выбраный по клику итем. В ListView нету Command для клика к сожелению(
@Shmachilin
@Shmachilin 3 жыл бұрын
Вы можете использовать для этого либо триггеры из библиотеки devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/, либо InputBinding thomaslevesque.com/2009/03/17/wpf-using-inputbindings-with-the-mvvm-pattern/
@bexoldershow4343
@bexoldershow4343 3 жыл бұрын
Спасибо за видео, лучшее что есть про mvvm на русском языке!
@HotCrusnic
@HotCrusnic 3 жыл бұрын
Можно ли во вьюмодели сделать проперти без явного объявления приватного поля?
@Shmachilin
@Shmachilin 3 жыл бұрын
Модно. Но работать будет не шипко быстро. Для этого объявляет либо в этом же классе, либо в базовом словарь, ключом которого будет имя Свойства, а значением - значение свойства. И делаете два protected-метода: GET и Set, обращающиеся к этому словарю.
@user-eb5dg7pg6l
@user-eb5dg7pg6l 3 жыл бұрын
Огромное спасибо за видео!!! В используемом файле в колонке Province/State появилась запись "Bonaire, Sint Eustatius and Saba" пришлось добавить в строчку yield return line.Replace("Korea,", "Korea -").Replace("Bonaire,", "Bonaire -") Но получается теперь при добавлении в таблицу таких записей приложение будет падать Может кто нибудь знает как это исправить может с помощью регулярных выражений или еще как нибудь?
@Shmachilin
@Shmachilin 3 жыл бұрын
Переписать модуль разбора csv так, чтобы можно было в значениях использовать кавычки без костылей.
@user-vg6gu8hc6w
@user-vg6gu8hc6w 3 жыл бұрын
@@Shmachilin спасибо)) но вот ток кто бы знал как это сделать 😁😂
@Shmachilin
@Shmachilin 3 жыл бұрын
Регулярные выражения, готовые библиотеки для работы с CSV...
@user-vg6gu8hc6w
@user-vg6gu8hc6w 3 жыл бұрын
@@Shmachilin Павел хочу сам написать, но либо туповат либо мало опыта, 3 вечере голову ломаю, так и до конца не удалось сделать чтоб за работало)))
@user-vg6gu8hc6w
@user-vg6gu8hc6w 3 жыл бұрын
@@Shmachilin в итоге написал спустя дня 4 раздумий как это сделать😁 а щас смотрю и думаю вот я тугой, там же все очевиднее некуда))
@just4n4cc17
@just4n4cc17 4 жыл бұрын
Не подскажете, что делать, если нужно менять наполнение окна (весь грид) по логическому течению программы (будет несколько шаблонов грида для разных ситуаций, которые следуют одна за другой)?
@Shmachilin
@Shmachilin 4 жыл бұрын
Добрый день! Можно поступить следующим образом: в приложении в окне может быть назначена главная модель-представления. Одним из её свойств может быть дочерняя модель-представления, которую главная модель может менять по своему усмотрению. В разметке окна можно добавить элемент ContentControl, свойство которого Content можно привязать к свойству "дочерняя модель-представления" у главной модели окна. Также в ресурсах, на пример, окна надо объявить набор DataTemplate'ов, где у каждого шаблона указать тип той модели-представления, которую он должен отображать. Таким образом, при смене значения свойства "дочерняя модель-представления" ContentControl будет искать шаблон, который будет отображать нужный тип данных - по сути, нужное отображение дочерней модели-представления. При этом всё это будет работать быстро и эффективно в согласии с шаблоном MVVM.
@just4n4cc17
@just4n4cc17 4 жыл бұрын
@@Shmachilin Спасибо Вам огромное, все получилось. Отдельная благодарность за уникальный и качественный контент.
@SoferPeOZN
@SoferPeOZN 3 жыл бұрын
@user-il3ev4tm9n
@user-il3ev4tm9n 2 ай бұрын
Павел, а если панель контролов из wpf в winforms через user control и elementhost подрубить, то кнопки управления и слайдер из панели контролов также можно забиндить через viewmodelbase и inotifypropertychange? Делаю плеер на libvlc. Затормозил на этом моменте.
@Shmachilin
@Shmachilin 2 ай бұрын
Скорее всего да. У ElementHost есть свойство DataContext.
@user-il3ev4tm9n
@user-il3ev4tm9n 2 ай бұрын
@@Shmachilin Благодарю! надо попробовать. Тяжко c# дается если честно и просто времени не хватает на обучение.
@Shmachilin
@Shmachilin 2 ай бұрын
@@user-il3ev4tm9n Нужно больше практики и конкретных, полезных кому-то задач. И стараться уйти поскорее от WinForms.
@SergNeoSM
@SergNeoSM 3 жыл бұрын
Спасибо огромное за ваши труды. Лучший материал на русском языке!
@dannycyberwalker
@dannycyberwalker 3 жыл бұрын
3:25:00 думаю здесь можно было использовать IAsyncEnumerable, тогда весь код был бы асинхронным.
@Shmachilin
@Shmachilin 3 жыл бұрын
Или IAsyncEnumetable?
@dannycyberwalker
@dannycyberwalker 3 жыл бұрын
@@Shmachilin Вот видишь, тяжело написать)
@user-dc9mi8bi6e
@user-dc9mi8bi6e Жыл бұрын
Стоит ли смотреть и пытаться понять эти уроки если опит работы с С# 3 месяца?
@TheDisJarpTV
@TheDisJarpTV 2 жыл бұрын
Действительно очень позновательно, это огрномный труд. Хотелось узнать только момент по поводу привязки команд. Дело в том что я искал решени кросплатформеных приложений на C#, и так получилось что начал изучать avalonia framework, который мне понравился. Так же он практически не отличается от WPF поэтому решили на основе ваших вебинаров разработать тестовое приложение на avalonia. И на моменте создания команд я не до конца понял для чего так сильно мучаться с интерфейсами, если можно привязать к обычным методам. Или это работает только на avalonia? И очень хотел бы узнать ваше отношение к данному framework, не будет такой ли вероятности что вы запишити курс по нему?
@Shmachilin
@Shmachilin 2 жыл бұрын
Здравствуйте! Avalonia не смотрел... Времени не было. Но скорее всего идеи в нем те же. Что же касается интерфейсов, то это обеспечивает большую гибкость в использовании.
@user-vg6gu8hc6w
@user-vg6gu8hc6w 4 жыл бұрын
Павел а можете подсказать почему Binding не видит комментарии ? у вас на видео Они видны, или это все решарпер а стандартными средствами видимость ограничена в пределах кассового наследования ?
@aRRma99
@aRRma99 4 жыл бұрын
Да стандартный редактор VS убогий и много чего не показывает. Ставьте решарпер.
@user-vg6gu8hc6w
@user-vg6gu8hc6w 4 жыл бұрын
@@aRRma99 дак решарпер денежки просит 😎
@aRRma99
@aRRma99 4 жыл бұрын
@@user-vg6gu8hc6w на торрент загляните
@user-vg6gu8hc6w
@user-vg6gu8hc6w 4 жыл бұрын
@@aRRma99 серьезно ))?
@Shmachilin
@Shmachilin 4 жыл бұрын
Тяжёлые наркотики покупать только у дилера!
@user-jj4bn2zd7d
@user-jj4bn2zd7d 2 жыл бұрын
Здравствуйте! Павел, подскажите, пожалуйста, я установил пробную версию решарпера, но, как я понял, там из коробки нет таких шаблонов, как notyfprop, цвета шрифтов другие и тд. Попытался покапаться в настройках, но их там настолько много, что голову сломаешь + еще расширения свои собственные. Можно ли как-то Ваши настройки решарпера получить или видео небольшое запилить по его возможностям?
@user-jj4bn2zd7d
@user-jj4bn2zd7d 2 жыл бұрын
Всё, спасибо, нашел в 3 части от Павла ссылку на шаблоны Мало ли у кого такой же вопрос возникнет: "Да. Скачать шаблоны можно отсюда: github.com/Infarh/CV19/files/5629522/ReSharper.Templates.zip"
@user-vg6gu8hc6w
@user-vg6gu8hc6w 4 жыл бұрын
Павел а в самом конце в упоминаете о чтате в телеге что за чат )? в него можно попасть )?
@Shmachilin
@Shmachilin 4 жыл бұрын
@GB_CSharp
@user-vg6gu8hc6w
@user-vg6gu8hc6w 3 жыл бұрын
@@Shmachilin павел нет такого канала или группы ( во всяком случаи в поиске ее не выдает ) возможно закрыта в настройках приватности с приглашением по ссылки ((
@feitan8745
@feitan8745 4 жыл бұрын
Здравствуйте, вы можете добавить субтитры к своей серии MVVM?
@Shmachilin
@Shmachilin 4 жыл бұрын
Здравствуйте! Пока наверное нет... не готов.
@amoe4333
@amoe4333 4 жыл бұрын
Делаю все тоже самое но на моменте записи MainWindowViewModel: ViewModel выходит ошибка ''ViewModel" является пространство имен, но используется как тип." Не могу понять почему P.S Бред. Создал новый проект, все работает, а в старом почему-то нет... Ох уж этот visualstudio.
@Shmachilin
@Shmachilin 4 жыл бұрын
По всей видимости у Вас пака, в которой лежат модели-представления, называется "ViewModel", а не "ViewModels". В результате было создано пространство имён "ViewModel" (в единственном числе), совпадающее с именем класса.
@Gifeest
@Gifeest 11 ай бұрын
Здравствуйте, подскажите как самому создать шаблон для генерации кода? 56:44
@Shmachilin
@Shmachilin 11 ай бұрын
Какого кода?
@Gifeest
@Gifeest 11 ай бұрын
На 56:44 вы начинаете писать notyfprop, потом говорите что пока вручную, потом будете это делать автоматически. Вот именно этот шаблон как создать? @@Shmachilin
@alexandrvint7098
@alexandrvint7098 2 жыл бұрын
Павел, подскажите пожалуйста, где можно основательно изучить технологию WPF с применением шаблона MVVM? В книгах очень все скудно, особенно с DataGrid.
@Shmachilin
@Shmachilin 2 жыл бұрын
В своё время я по Метанит и professorweb.ru изучал. Но с книгами по этому делу (на русском) беда - да...
@antonkulikov6726
@antonkulikov6726 4 жыл бұрын
Уроки топовые. Есть пара вопросов: а что если UI у нас на wpf ,а вью модель на C++/cli. Причем проект сам на C++,а UI на wpf как dll ка подключается к проекту на C++/CLI. Будет ли в dll класс application,или может его можно как-то создать,через расширения разметки? Вью модель придется установить явно окну через. Data context? Спасибо!
@Shmachilin
@Shmachilin 4 жыл бұрын
У Вас есть интерфейс пользователя (UI) - визуальная часть. А также может быть что угодно в любой форме написанное хоть на C++, хоть на Delphi, хоть веб-сервис. Для приложения это всё можно выделить в понятие "модели". И для того чтобы "подружить" "модель" с UI можно взять "модель" и обернуть её в оболочку - модель-представления. Давно принял для себя стратегию поведения: если что-то не получается сделать "в лоб", то надо уходить в абстракцию добавляя новую оболочку которую я могу контролировать. Создать класс-модель поведение которого я могу определить так как мне надо и внутри этого класса уже выполнить управление над тем объектом, который надо контролировать. А снаружи я получу интерфейс моего класса в том виде, в котором он мне нужен. (Паттерн Фасад это вроде бы я "изобрёл" в своё время). Также и тут. Если у Вас есть какая-то вью-модель, но она Вас по каким-то причинам не устраивает, то создавайте над ней оболочку - ещё одну вью-модель и уже эту модель-представления передавать в UI.
@antonkulikov6726
@antonkulikov6726 4 жыл бұрын
@@Shmachilin да . Именно так я и делаю. А можно ли класс application в dll на wpf в таком случае(например в вызове управляемого кода на C# из неуправляемого на C++) определить (то есть именно в dll-ке)?
@Shmachilin
@Shmachilin 4 жыл бұрын
Нет ничего невозможного. Вопрос лишь в числе граблей на которые потребуется для этого наступить. Вот только зачем? Зачем тащить интерфейс внутрь логики?
@antonkulikov6726
@antonkulikov6726 4 жыл бұрын
@@Shmachilin тут такое дело... Есть проект на c++,с кучей легаси. К сожалению qt использовать нельзя. Поэтому в плане интерфейса выбора не так уж и много:либо mfc,но это та ещё боль. Либо wpf, но приходится как раз создавать абстракцию в коде c++/cli вью модель, которую и подсовывать ее. Вот такой вот колхоз...
@Shmachilin
@Shmachilin 4 жыл бұрын
А главным запускаемым проектом должен быть обязательно проект на c++?
@user-qz1uh9fj6l
@user-qz1uh9fj6l 2 жыл бұрын
Добрый день! Я просмотрел половину видео и местами бывает не совсем понятно. Хотелось бы узнать для людей с каким уровнем знаний рассчитан данный урок? И достаточно ли будет этих знаний, чтобы трудостроиться в IT компанию ?
@Shmachilin
@Shmachilin 2 жыл бұрын
Здравствуйте! Ну как минимум требуется уметь отличать абстрактный класс от интерфейса и знать базовое представление о паттернах проектирования (что они хотя бы есть...) Достаточно ли этого будет для трудоустройства сказать сложно.
@TheMilliardo
@TheMilliardo 3 жыл бұрын
Подскажите пожалуйсто как забиндить TextBox к свойству типа double с UpdateSourceTrigger=PropertyChanged? При PropertyChanged не получаеться искользовать "точку". Я нашел где то решение на 3-4 класса ... Может быть есть что то по проще и короче?
@Shmachilin
@Shmachilin 3 жыл бұрын
Есть такой костылик: добавить небольшую задержку на ввод следующей за точкой цифры. Text="{Binding TestValue, UpdateSourceTrigger=PropertyChanged, Delay=100}" Если пользователь не успеет за 100мс ввести цифру, следующую за точкой, то значение из свойства TestValue перечитано и точка будет отброшена. Задержку можно подобрать так как будет удобно.
@user-lv3sy9zx3d
@user-lv3sy9zx3d 2 жыл бұрын
С помощью каких инструментов вы рисовали графики в приложении для института 33:25?
@Shmachilin
@Shmachilin 2 жыл бұрын
OxyPlot
@Shmachilin
@Shmachilin 2 жыл бұрын
www.nuget.org/packages?q=OxyPlot.Contrib.Wpf
@Saveaaa
@Saveaaa 3 жыл бұрын
У меня 2 вопроса. В приложении главное окно, в котором реализованно переключение между 5 пейджами. в каждом page по 2 listView и 1 datagrid , 3 диалога для добавления данных , 1 для вывода сообщений, плюс поля для отображения доп информации при выборе какой либо строки, диалог на удаление, сюда же biningи visibl и enable и на selectValue. Так вот это тонна биндингов и переменных. такая тонна, что уже кажется , что что-то пошло не так и это бред. Это норм для mvvm с сложным ui? Если это можно назвать сложным. Или я что то не так делаю? И второй вопрос- у вас в программе для самолётов было много окон , которые зависили от графика и информация в них отображалсь исходя из графика. Как и наоборот когда вы нажимали на плей на окне с приборами все начинало двигаться, включая график. Как это реализованно? Это дочерние окна?
@Shmachilin
@Shmachilin 3 жыл бұрын
Добрый день! Вы можете разбивать представление на вложенные элементы - выделять повторяющиеся части в отдельные компоненты. И да, привязок там может быть очень много. А в том приложении есть объект плеер, который "двигает" время, есть объект "сервер индикации", который ловит изменения времени в плеере (обрабатывает событие), читает данные из контейнера значений и отсылает данные клиентам. Клиенты имеют набор свойств к которым привязываются визуальные индикаторы.
@Saveaaa
@Saveaaa 3 жыл бұрын
@@Shmachilin когда открывается новое окно с клиентом . Вы туда передаете DataContext ? Или как новые окна получают увеломления о событиях или новые данные?
@Shmachilin
@Shmachilin 3 жыл бұрын
Когда открывается новое окно, то для него создаётся его собственная модель-представления. Модель-представления дочернего окна может подписаться на события модели-представления родительского окна. Либо модель-представления родительского окна может сохранить себе ссылку на модель-представления дочернего окна и передавать ей данные.
@Saveaaa
@Saveaaa 3 жыл бұрын
@@Shmachilin понятно, спасибо
@Shmachilin
@Shmachilin 3 жыл бұрын
Отпишитесь по результатам.
@alexandrsharp920
@alexandrsharp920 2 жыл бұрын
а какие у вас дополнения для студии ? в частности внизу что то похожее на счетчик ресурсов
@Shmachilin
@Shmachilin 2 жыл бұрын
Справа снизу информацию выводят РеШарпер и PerfWatson Mon marketplace.visualstudio.com/items?itemName=PaulHarrington.PerfWatsonMonitor-9621
@alexandrsharp920
@alexandrsharp920 2 жыл бұрын
@@Shmachilin спасибо!
@damascake
@damascake 2 жыл бұрын
Ставь лайк, если ты на 3:40:00 тоже кричал автору в монитор, что он уже распарсил строку, у него уже массив, кавычки можно удалять.
@abrajmek_zalilov
@abrajmek_zalilov 2 жыл бұрын
Здравствуйте, автор! Спасибо за Ваши старания. Подскажите пожалуйста, на сколько это всё актуально на сегодня, ведь sdk уже и 5.0 и 6.0 уже существуют... Надо ли мне обязательно и 3 версию ставить?
@Shmachilin
@Shmachilin 2 жыл бұрын
Здравствуйте! Всё актуально. Используйте последнюю версию Visual Studio и SDK .Net
@abrajmek_zalilov
@abrajmek_zalilov 2 жыл бұрын
@@Shmachilin спасибо за оперативный ответ! Перехожу из вэба на C# и десктопные приложения, хочу заниматься разработкой VST и другой работой со звуком. Нашёл Ваш канал, он как никогда кстати. Хороший вход... Уж не Гоша Дударь, прости г-ди.
@vyachgusev
@vyachgusev 8 ай бұрын
@@Shmachilin я только сейчас присоединяюсь к прохождению ваших нереально крутых образовательных видео! а если уже .net 8.0 есть? его можно использовать? и спасибо за уроки! гоша дударь курит в сторонке...
@Shmachilin
@Shmachilin 8 ай бұрын
@@vyachgusev там концептуально ничего не поменялось. Синтаксис интереснее стал.
@shlm3650
@shlm3650 3 жыл бұрын
Как сделать отдельную команду "ChangeTabIndexCommand" , что бы можно было через "Window.Recources" ?
@Shmachilin
@Shmachilin 3 жыл бұрын
У команды есть параметр. Можно передать TabControl в качестве параметра.
@enderhexfyreeve1900
@enderhexfyreeve1900 2 жыл бұрын
как-то не получается добавить солюшн с несколькими проектами как это сделано на видио. у меня такое предупреждение: your solution contains files outside the solution folder which will not be included. затем если предупреждение проигнорить то папки гита создасца в проекте, а не в папке солюшн. что с этим можно сделать? и на 14:26 окошко по-другому выглядит. нет "отправить в github" хотя учетная запись гитхаба прикреплена. подскажите, что там надо в настройках поменять? vs studio 2019 16.10.0.
@Shmachilin
@Shmachilin 2 жыл бұрын
Галку не ставили при создании решения что бы размещать проект в папке решения?
@enderhexfyreeve1900
@enderhexfyreeve1900 2 жыл бұрын
@@Shmachilin точно. в ней и была проблема. она сама по умолчанию была. а как сделать чтобы кнопка публикации на гитхаб была в тимэксплорере как на видио? у меня публикация только через раздел меню git работает. в принципе не так важно откуда публиковать, но может если подскажете, то лучше пойму настройки студии.
@oliviacolins6856
@oliviacolins6856 3 жыл бұрын
Подскажите, каким образом можно отобразить данные в реальном времени не перезапуская программу? т.е. есть БД откуда берутся данные и отображаются в программе в момент запуска программы. Как только в БД попадают новые данные из вне, приложение их не отображает. Только при перезапуске программы... Подскажите, как можно сделать чтоб при изменение значений в БД, сразу это отображалось в программе?
@Shmachilin
@Shmachilin 3 жыл бұрын
А к БД Вы как подключаетесь? Что мешает сделать кнопку/таймер и выполнить эту процедуру вновь в процессе работы программы и загрузить данные снова?
@oliviacolins6856
@oliviacolins6856 3 жыл бұрын
​@@Shmachilin Спасибо, вроде на данном этапе разобралась. А так подключалась через EntityFramework, проблема была что получала от EntityFramework те же данные, а не обновленные и сделала кнопку обновить, как вы рекомендовали. Теперь думаю как реализовать все это дело через таймер, потому как не хочу получать данные при клике на кнопку обновить. Спасибо за очень ценный материал.
@hikkathon
@hikkathon 3 жыл бұрын
Пытался сделать свою команду "Свернуть окно приложения"(MinimizedApplicationCommand) для практики, не вышло( на прямую в xaml окна всё получается this.WindowState = WindowState.Minimized; а через команду не могу сообразить как хD
@Shmachilin
@Shmachilin 3 жыл бұрын
Надо смотреть как Вы пытались её сделать... Надо либо ссылку на ГитХаб, либо хотя бы фрагмент кода. Иначе там много что может пойти не так.
@TbIPDblM
@TbIPDblM Жыл бұрын
Технически все понятно, но я ахаюсь только с одним пунктом, делаю все как по видео создаю WPF проект, создаю реп заливаю на гитхаб, но при добавлении /Tests/ WPF и консольного проектов, их не видит гит (и в дальнейшем работая на др компе при получении реп папка tests пустая), либо они отображаются в проекте основном.
@Shmachilin
@Shmachilin Жыл бұрын
Галочку поставили в диалоге создания первого проекта о размещении всех файлов в одном каталоге? Ссылку на ГитХаб репозиторий дайте посмотреть.
@TbIPDblM
@TbIPDblM Жыл бұрын
@@Shmachilin не ставил 😬🫤завтра свежим взглядом погляжу, спасибо 🫡
@Shmachilin
@Shmachilin Жыл бұрын
@@TbIPDblM ссылку скиньте.
@TbIPDblM
@TbIPDblM Жыл бұрын
@@Shmachilin разобрался, при создании у меня первого проекта файл решения там же располагался, галочку снял, и все стало ок
@Shmachilin
@Shmachilin Жыл бұрын
Теперь и Вы знаете о этих граблях. Я бы руки оторвал тому кто эту галочку там разместил.
@user-gl1ti5op4v
@user-gl1ti5op4v 3 жыл бұрын
а почему поля классов с большой буквы? Просто такой стиль написания кода? Просто вроде общепринято с маленькой обозначать
@Shmachilin
@Shmachilin 3 жыл бұрын
Для имён перечислений, структур, делегатов, классов, членов классов (полей, свойств, методов), а также входных переменных метода принят PascalCase. Для локальных переменных - lower_case. camelCase - это стиль Java.
@user-gl1ti5op4v
@user-gl1ti5op4v 3 жыл бұрын
@@Shmachilin спасибо, я просто смотрел и другие c# уроки, везде не много по разному
@kavelquu
@kavelquu 3 жыл бұрын
@@Shmachilin эм нет, во всех coding conventions (в том числе и от самих microsoft) lower_case никогда не использовался в C#. В C# используют только PascalCase и camelCase, lower_case нет
@user-ix4cm7ch5z
@user-ix4cm7ch5z Жыл бұрын
момент с textbox ,почему то он не в какую не менялся ,ненаписать не удалить что в нем
@Shmachilin
@Shmachilin Жыл бұрын
Где именно?
@user-ix4cm7ch5z
@user-ix4cm7ch5z Жыл бұрын
@@Shmachilin это уже вроде особо не нужно ,но сейчас пытаюсь кнопками влево вправо переключать ,не получается.Хотя вроде бы все прописал
@vanovano9056
@vanovano9056 3 жыл бұрын
Когда команда CloseApplicationCommand определена как класс в отдельном файле, то как ресурс она объявляется Как объявить ее ресурсом если она определена в ViewModel? Спасибо.
@Shmachilin
@Shmachilin 3 жыл бұрын
Если она часть модели-представления, то зачем её надо "закреплять" в ресурсах? Есть ведь модель-локатор...
@vanovano9056
@vanovano9056 3 жыл бұрын
@@Shmachilin Если команда объявлена как отдельный класс, то экземпляр команды создается для каждого упоминания ее в разметке, чтобы этого не произошло мы используем ее как ресурс, т.к. в этом случае экземпляр команды создастся единожды. Когда команда часть ViewModel, то созданием команды рулим мы сами, создаем ее в конструкторе 1 раз. Правильно я понял?
@Shmachilin
@Shmachilin 3 жыл бұрын
Через разметку никак. В коде - можно в ресурсы добавить что угодно. Один вопрос: а зачем?
@vanovano9056
@vanovano9056 3 жыл бұрын
@@Shmachilin Сейчас вопрос зачем уже не стоит. Сразу после просмотра это было не совсем понятно ;)
@oldschool2445
@oldschool2445 3 жыл бұрын
Немного не могу понять как менять свойства к которым мы делаем Binding из какого-нибудь метода, вот допустим свойство Status 1:50:20 которое тут показано, если я внутри своего метода создаю объект класса MainWindowViewModel vm = new(); далее устанавливаю свойству Status нужный текст vm.Status = "moy_text"; То при вызове этого метода сам текст в статус баре не меняется. Как правильно логикой менять значение свойств во ViewModel, чтобы элемент их сразу же отобразил после изменения.
@Shmachilin
@Shmachilin 3 жыл бұрын
А где и зачем Вы создаёте MainWindowViewModel?
@oldschool2445
@oldschool2445 3 жыл бұрын
@@Shmachilin Создавал экземпляр MainWindowViewModel чтобы через него задать свойству Status какое-нибудь нужное мне значение (но так не сработало). Как мне сделать чтобы мой метод мог менять это свойство, а статус бар который прибинден к этому свойству после этого так-же мгновенно обновлялся.
@Shmachilin
@Shmachilin 3 жыл бұрын
Вы не должны сами создавать эту модель. Её создаёт контейнер сервисов. Вам надо получить её экземпляр либо вытащив её из DataContext главного окна, либо из контейнера сервисов. Но скорее всего Вы в корне делаете что-то не так...
@oldschool2445
@oldschool2445 3 жыл бұрын
@@Shmachilin Вот смотрите для примера, я создаю новый класс class Testclass, в нём создаю метод TestMethod(), что мне нужно написать внутри моего TestMethod, чтобы изменить текст в статус баре, на какой-нибудь другой. (С учетом того что как в 1:50:20 у нас уже прибинден статус бар к свойству Status описанному в MainWindowViewModel
@Shmachilin
@Shmachilin 3 жыл бұрын
Ваш класс должен быть либо сервисом приложения, зарегистрированным в контейнере сервисов. Тогда в его конструкторе Вы сможете добавить параметр TestClass(MainWindowViewModel model). Либо Вам надо получить доступ к главному контейнеру сервисов и из этого контейнера достать модель-представления главного окна.
@user-pm2zb1rb5b
@user-pm2zb1rb5b 3 жыл бұрын
Подскажите, пожалуйста, есть ли исходники RRG-Express?
@Shmachilin
@Shmachilin 3 жыл бұрын
Исходники есть.
@user-pm2zb1rb5b
@user-pm2zb1rb5b 3 жыл бұрын
@@Shmachilin можете дать ссылку, пожалуйста? Очень заинтересовали некоторые функции, хочется посмотреть на реализацию)
@Shmachilin
@Shmachilin 3 жыл бұрын
Ссылку дать не могу. Коммерческий продукт ГСС. Могу ответить на вопросы.
@wastegate711
@wastegate711 3 жыл бұрын
На рабочем столе заставка из Eve Online.
@Shmachilin
@Shmachilin 3 жыл бұрын
Nemesis
@user-ek1rj2ry9e
@user-ek1rj2ry9e Жыл бұрын
WPF жив? Если да, то наверно сплошное легаси?
@Shmachilin
@Shmachilin Жыл бұрын
Вы с чего взяли?
@user-ek1rj2ry9e
@user-ek1rj2ry9e Жыл бұрын
@@Shmachilin я не знаю, вот и спрашиваю
@user-ne5mt6xg7y
@user-ne5mt6xg7y Жыл бұрын
😀I'm enjoying watching KZbin. foreach (var row in lines) { var province = row[0].Trim(); var country_name = row[1].Trim(' ', '"'); var counts = row.Skip(4).Select(Int32.Parse).ToArray(); //ERROR yield return (country_name, province, counts); } ERROR : System.FormatException:'input string was not in a correct format" What's the cause?
@Pincne
@Pincne 11 ай бұрын
Hi, It is necessary to exclude a number of countries that fall out of the general view when selecting a row private static IEnumerable GetDataLines() { var data_stream = GetDataStream().Result; var data_reader = new StreamReader(data_stream); while (!data_reader.EndOfStream) { var line = data_reader.ReadLine(); if (string.IsNullOrWhiteSpace(line)) continue; yield return line.Replace("Korea,","Korea -").Replace("Bonaire,", "Bonaire -").Replace("Helena,", "Helena -"); } }
@wasknocked
@wasknocked 3 жыл бұрын
Стыдно - ничего не делать!!
@maxm1079
@maxm1079 3 жыл бұрын
качественный материал, то что есть на itdvn невозможно слушать из за зелености самого доклачика и не поставленного голоса.
WPF+MVVM часть 2/14 - Стили, шаблоны, триггеры
3:51:22
Павел Шмачилин
Рет қаралды 27 М.
WILL IT BURST?
00:31
Natan por Aí
Рет қаралды 10 МЛН
SPILLED CHOCKY MILK PRANK ON BROTHER 😂 #shorts
00:12
Savage Vlogs
Рет қаралды 48 МЛН
Почему арестовали Дурова?
14:47
Анатолий Шарий
Рет қаралды 1,1 МЛН
WPF
16:05
XpucT
Рет қаралды 14 М.
Как перерабатывают БАТАРЕЙКИ ?
22:28
Скрыпник
Рет қаралды 306 М.