огромная благодарность! такие уроки на вес золота, а Вы бесплатно со всеми поделились знаниями, дай Бог Вам здоровья! Чтобы Вы встретили таких же добрых людей, как и Вы сами!
@someelse9894 жыл бұрын
Какая редкость, контент на подобную тему, ну очень мало. Павел, спасибо!
@Shmachilin4 жыл бұрын
Сам собирал по крупицам...
@uporka69243 жыл бұрын
Согласен, давно искал что то подобное.
@hrandron4 жыл бұрын
Я начинающий (пилю программу для управления и вывода данных на ПК из самодельного устройства). Столько перечитал инфу в инете, столько пересмотрел роликов на ютубе, но только у вас наконец-тось понял что такое привязка, как создавать команды. Спасибо.
@Николай-ш8ж4у4 жыл бұрын
Живешь такой, потихоньку ковыряешь C#, заказы на фрилансе небольшие делаешь по фану. Думаешь, "вроде как, я программист". Ага. Посмотрел 4 часа на одном дыхании, и понял, что тебя обоссали ))) Если без шуток, огромная благодарность за контент! Столько моментов раскрыто, доселе неведомых.
@Shmachilin4 жыл бұрын
А сколько у меня таких моментов было с подобным ощущением... и сколько ещё будет...
@evilgamer2503 Жыл бұрын
Это я когда на работу в ит пришел
@yanus1744 жыл бұрын
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
@aRRma994 жыл бұрын
Это реально шедевр!!! Самое лучшее что можно посмотреть по WPF+MVVM в ру сегменте!!
@dmitriialeksandrovich45652 жыл бұрын
+++
@10011byrbon Жыл бұрын
В этом плейлисте чуть ли не 50 часов лекций. Столько материала, что аж страшно) Хочется все изучить, но так как новичок, то дается сложновато пока. Буду ковырять помаленьку, спасибо за такой контент.
@KonstantineWhite4 жыл бұрын
Спасибо! Наверно лучший материал по данной тематике, по крайней мере в Ru-нете!
@ssayless3 жыл бұрын
Полный курс по WPF с прекрасными сопровождающими комментариями, примерами, да еще и бесплатно! Год копаюсь в данной теме и это определенно лучший материал. Спасибо огромное за такой титанический труд!
@Shmachilin3 жыл бұрын
Буду рад если Вам это пригодится и Вы, в свою очередь, научите этому кого-то.
Павел, огромнейшее спасибо и благодарность. Очень крутой материал! По данной тематике его вообще в принципе очень мало и практически невозможно собрать все в единое целое, а здесь все как на ладони, причем на открытой ладони, не зажато в кулачке)))))). Необыкновенная щедрость!)))
@Shmachilin4 жыл бұрын
Пишите вопросы.
@fumbo98992 жыл бұрын
С такими знаниями, вам вполне можно создавать свои платные курсы по обучению людей. Код на высшем уровне)
@oldschool24453 жыл бұрын
Огромное спасибо! Очень крутой материал, аж голова распухла )) Вдумчиво разбирал лекцию 2 дня, чтобы всё запомнить и потренироваться. Буду смотреть следующие. Просто информационный клад.
@Shmachilin3 жыл бұрын
У кого-то же хватает терпения всё это просмотреть...
@ЛенаЛесная-у5б Жыл бұрын
@@Shmachilin Получаю огромное удовольствие, от души благодарю!
@bonintimo3 жыл бұрын
Просмотр ОТ и ДО, т.е. ВСЕ %) Лайк за работу!
@suiqrim3 жыл бұрын
Большое спасибо за целую серию очень полезных видео. Никак не мог понять патерн MVVM, но ваши видео очень помогли мне и я достаточно быстро освоился. Ещё бонусом к MVVM досталась настройка дизайна разных элементов WPF.
@argentmize3 жыл бұрын
В кои-то веки ютуб нормальный ролик порекомендовал. Жаль только намного позже, чем это было нужно. Был вынужден начать с mvvm light, чтобы доделать программу, теперь вернулся к дефолтному wpf,и эти записи очень кстати, чтобы разобраться в кишках 😁
@VyacheslavTamplier3 жыл бұрын
Павел, огромное спасибо за такой замечательный материал! На русском (да, и возможно, на английском) не найти такой подробный разбор паттерна MVVM в сети интернет, имхо. Также Вы довольно подробно разбираете другие аспекты разработки ПО, настолько комплексного подхода я еще не видел, и воды по минимуму, только самое необходимое с полезными отвлечениями! Продолжайте в том же духе и у Вас всегда будет благодарный слушатель-программист. По прошествии времени появился еще один момент, при котором программа сваливается в исключение. Появились регионы в названии которых тоже присутствует запятая, это - "Saint Helena, Ascension and Tristan da Cunha" и "Bonaire, Sint Eustatius and Saba", надо и их учитывать при парсинге csv-файла. Это для тех, кто столкнется с этой проблемой в настоящем и будущем.
@Shmachilin3 жыл бұрын
По ходу надо отдельным стримом делать нормальный парсер csv.
@VyacheslavTamplier3 жыл бұрын
@@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); } }
@ДмитрийДемин-ц1е3 жыл бұрын
Внесу свои пять копеек. Огромное спасибо за такой материал. Понравилось, что вначале был разбор инфраструктуры проекта. Вообще, тема архитектуры это еще на целый стрим в 5 часов потянет). Еще раз благодарю.
@АртемРащепкин-ф4н3 жыл бұрын
Спасибо большое! Достаточно подробно, но о многом, с пояснениями и доходчиво! Большая благодарность!
@positivemoody3 жыл бұрын
Какой вы молодец проводить уроки по средствам трансляции в Ютубе.
@MagistrTNT3 жыл бұрын
Это лучшие видео по теме из всего , что я видел!!! Особое спасибо за науку по правильной организации структуры проекта.
@nikitaisyuk86303 жыл бұрын
Очень рад что нашел настолько подробное видео по данной теме. Спасибо!)
@ЯГречка3 жыл бұрын
Вот просто спасибо, что ты есть, Павел! Спасибо, что ты создал канал на ютубе! Спасибо, что ты записал видосы по MVVM! 3 дня убил на то чтобы разобраться с тем как привязать коллекцию к DataGrid и просто вот сделал привязку к заголовку как ты и по альтернативе к коллекции и все чудесным образом заработало СПАСИБО!
@f.ingenia3 жыл бұрын
Павел благодарю! Отлично всё объясняете. Очень полезное видео.
@xzenter4 жыл бұрын
Большое спасибо! Лучший мастер класс и не только по MVVM! Ваш труд мне очень помог, желаю успехов.
@gredar773 жыл бұрын
Спасибо вам огромное. Много моментов, которые были непонятны при изучении построения приложений с помощью WPF в рамках MVVM, становятся ясны. Подача очень приятная.
@АлександрНиконов-и4ы3 жыл бұрын
Отличная подача материала. Спасибо!
@ВладимирЗаворотный-т4ж3 жыл бұрын
Очень крутой вебинар! Собираюсь посмотреть все видео по wpf mvvm
@Blackfoxx7973 жыл бұрын
Просто клад нашла!! Здорово. Спасибо. Разбираюсь в лекции) После разбора иду дальше смотреть
@alexkot9849 Жыл бұрын
Спасибо Дмитрий за Ваш урок!
@АлексДжаванов4 жыл бұрын
Бро круто! лайк и подписка однозначно! не останавливайся
@Shmachilin4 жыл бұрын
Благодарю!
@АлексДжаванов4 жыл бұрын
@@Shmachilin Единственное с начала 3 часа понял что урок для новичка сложноват ( Просто повторяю не понимая зачем это делается... И даже не понимаю имеет ли смысл смотреть дальше при таком раскладе... Ибо инфа из за непонимание объемной картины в целом просто не усваивается (((
@Shmachilin4 жыл бұрын
Есть такое. Скорее это для тех, кто уже не пугается конструкций языка, успел поработать с WinForms и слышал что такое паттерны проектирования.
@АлексДжаванов4 жыл бұрын
@@Shmachilin посмотрев примеры попроще и со второго захода с осмыслением дошёл до 3 часа! Хочу сказать что контент бомба! На других видео либо умышленно, либо по незнанию упускаю много мелочей,. С тем же биндингом, Прям спасибо большое ещё раз за такую годноту !
@Shmachilin4 жыл бұрын
@@АлексДжаванов задавайте вопросы! А то скучно...
@maxsoul7572 жыл бұрын
вау, я наткнулся на потрясный контент, спасибо!
@23tmsektant2 жыл бұрын
Спасибо за контент)Посмотрел пока что первую часть(и повторил конечно же её) Очень доступно рассказываете)
@Shmachilin2 жыл бұрын
С csv проблем не возникло?
@23tmsektant2 жыл бұрын
@@Shmachilin нет.Проблема была с графиком, т.к. последняя версия OxyPlot.WPF ,видимо , значительно отличается от той,что была на видео.Код с видео на ней у меня не работал. Поэтому я установил старую версию пакета м все заработало)
@vyachgusev Жыл бұрын
@@Shmachilin начал проходить ваши видео и как раз возникла ошибка "System.FormatException: "Unput string was not in a correct format" вот здесь "var counts = row.Skip(4).Select(int.Parse).ToArray();". Пока разобраться не удалось, в чем причина. Когда я полный 0, даже не удивляюсь..) Это тот момент, когда вы учите структурировать данные с гитхаба института
@vyachgusev Жыл бұрын
Все, почитал комментарии, увидел, что там добавились данные, все получилось! Мне бы такого препода, как вы! А то у меня вообще все тухло с этим. Приходится самообразованием заниматься. Через полгода сдавать тему по диплому, а я то одно то другое смотрю и пробую учиться. В итоге понимания в программировании никакого совершенно. Надеюсь, что после ваших уроков я все таки смогу, что нибудь сделать и не лопухнуться... Спасибо ВАМ огромное!
@remontunasdotru2 жыл бұрын
Спасибо вам за объяснение. Все кристально понятно!
@svetlanachernova97402 жыл бұрын
Спасибо шикарное видео!!!! Очень полезное!
@АлексейНиколаев-й3к Жыл бұрын
Шедеврально!!!!
@ГеоргийБарышников-п7т3 жыл бұрын
Спасибо за ролик , только не прекращайте выпускать ролики 🙏
@yz777zhumabayev62 жыл бұрын
Спасибо за видео очень много интересного
@Serhii_lolovich4 жыл бұрын
Очень помогло понять mvvm, спасибо
@topProgrammer3 жыл бұрын
Круто, спасибо за труд. Продолжай!
@BrooDRay Жыл бұрын
Огромнейшее спасибо за плейлист по WPF! Есть ли у вас аккаунт на бусти? Возможно кто-то захочет вас отблагодарить монеткой, если у них есть лишняя)
@mnocard4 жыл бұрын
Очень круто! Спасибо!
@СергейШиповский-й2щ3 жыл бұрын
Спасибо большое!
@Rueslan4 жыл бұрын
Действительно, хорошее изложение. Я ток начал учить мввм, это видео прям прояснило многие моменты. Но я понял что ничего не смыслю в программировании(
@Shmachilin4 жыл бұрын
Когда-то я думал, что никогда и ни за что не буду программировать...
@PsychosocialBastard3 жыл бұрын
@@Shmachilin что изменилось?
@Shmachilin3 жыл бұрын
Было время свободное и была книга (Delphi5 2000 год). Сел, вдумчиво прочитал... Потом был ВУЗ и вторая вышка по программированию.
@vyachgusev Жыл бұрын
@@Shmachilin а сколько вам лет, когда вы начали программировать? я правильно понял, что первая вышка была не по программированию?
@Shmachilin Жыл бұрын
@@vyachgusev Первая Вышка была по радиотехнике.
@betnews-86164 жыл бұрын
Вы очень круты!!! Спасибо большое!
@dmitriialeksandrovich45652 жыл бұрын
Вы просто бог))
@animagnoa3 жыл бұрын
при установки компонентов в начале урока был момент с установкой компонента "Git для Windows" - если я поставлю этот пункт - инсталятор не по.ерит уже установленную ранее git систему поставленную с официального сайта git? или это совсем другое?
@Shmachilin3 жыл бұрын
Вопрос хороший. Не пробовал. Обычно проблем с переустановкой Git в системе не возникало.
@McGewen Жыл бұрын
СУПЕР!!!!
@pavelkross3 жыл бұрын
Спасибо! очень годный контент
@Gifeest Жыл бұрын
Здравствуйте, подскажите как самому создать шаблон для генерации кода? 56:44
@Shmachilin Жыл бұрын
Какого кода?
@Gifeest Жыл бұрын
На 56:44 вы начинаете писать notyfprop, потом говорите что пока вручную, потом будете это делать автоматически. Вот именно этот шаблон как создать? @@Shmachilin
@viruslab14 жыл бұрын
все четко ))) узнал кое что новое
@TheMilliardo4 жыл бұрын
Подскажите пожалуйсто как сделать команду для SelectedItem в ListView. А также если в также интиресует кнопка с коммандой внутри ItemTemplate listview что бы удалить выбраный по клику итем. В ListView нету Command для клика к сожелению(
@Shmachilin4 жыл бұрын
Вы можете использовать для этого либо триггеры из библиотеки devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/, либо InputBinding thomaslevesque.com/2009/03/17/wpf-using-inputbindings-with-the-mvvm-pattern/
@someonewhoyoudontknowiguess3 жыл бұрын
3:25:00 думаю здесь можно было использовать IAsyncEnumerable, тогда весь код был бы асинхронным.
@Shmachilin3 жыл бұрын
Или IAsyncEnumetable?
@someonewhoyoudontknowiguess3 жыл бұрын
@@Shmachilin Вот видишь, тяжело написать)
@Морпех-г2с2 жыл бұрын
Стоит ли смотреть и пытаться понять эти уроки если опит работы с С# 3 месяца?
@ПетровичиК-м5у8 ай бұрын
Павел, а если панель контролов из wpf в winforms через user control и elementhost подрубить, то кнопки управления и слайдер из панели контролов также можно забиндить через viewmodelbase и inotifypropertychange? Делаю плеер на libvlc. Затормозил на этом моменте.
@Shmachilin7 ай бұрын
Скорее всего да. У ElementHost есть свойство DataContext.
@ПетровичиК-м5у7 ай бұрын
@@Shmachilin Благодарю! надо попробовать. Тяжко c# дается если честно и просто времени не хватает на обучение.
@Shmachilin7 ай бұрын
@@ПетровичиК-м5у Нужно больше практики и конкретных, полезных кому-то задач. И стараться уйти поскорее от WinForms.
@Ayub_Yaqub2 жыл бұрын
Класс спасибо
@dreamr33714 жыл бұрын
Очень круто!
@HotCrusnic4 жыл бұрын
Можно ли во вьюмодели сделать проперти без явного объявления приватного поля?
@Shmachilin4 жыл бұрын
Модно. Но работать будет не шипко быстро. Для этого объявляет либо в этом же классе, либо в базовом словарь, ключом которого будет имя Свойства, а значением - значение свойства. И делаете два protected-метода: GET и Set, обращающиеся к этому словарю.
@ВладимирЗаворотный-т4ж3 жыл бұрын
С помощью каких инструментов вы рисовали графики в приложении для института 33:25?
@Shmachilin3 жыл бұрын
OxyPlot
@Shmachilin3 жыл бұрын
www.nuget.org/packages?q=OxyPlot.Contrib.Wpf
@максимевстюхин4 жыл бұрын
Огромное спасибо за видео!!! В используемом файле в колонке Province/State появилась запись "Bonaire, Sint Eustatius and Saba" пришлось добавить в строчку yield return line.Replace("Korea,", "Korea -").Replace("Bonaire,", "Bonaire -") Но получается теперь при добавлении в таблицу таких записей приложение будет падать Может кто нибудь знает как это исправить может с помощью регулярных выражений или еще как нибудь?
@Shmachilin4 жыл бұрын
Переписать модуль разбора csv так, чтобы можно было в значениях использовать кавычки без костылей.
@АлексДжаванов3 жыл бұрын
@@Shmachilin спасибо)) но вот ток кто бы знал как это сделать 😁😂
@Shmachilin3 жыл бұрын
Регулярные выражения, готовые библиотеки для работы с CSV...
@АлексДжаванов3 жыл бұрын
@@Shmachilin Павел хочу сам написать, но либо туповат либо мало опыта, 3 вечере голову ломаю, так и до конца не удалось сделать чтоб за работало)))
@АлексДжаванов3 жыл бұрын
@@Shmachilin в итоге написал спустя дня 4 раздумий как это сделать😁 а щас смотрю и думаю вот я тугой, там же все очевиднее некуда))
@bexoldershow43434 жыл бұрын
Спасибо за видео, лучшее что есть про mvvm на русском языке!
@just4n4cc174 жыл бұрын
Не подскажете, что делать, если нужно менять наполнение окна (весь грид) по логическому течению программы (будет несколько шаблонов грида для разных ситуаций, которые следуют одна за другой)?
@Shmachilin4 жыл бұрын
Добрый день! Можно поступить следующим образом: в приложении в окне может быть назначена главная модель-представления. Одним из её свойств может быть дочерняя модель-представления, которую главная модель может менять по своему усмотрению. В разметке окна можно добавить элемент ContentControl, свойство которого Content можно привязать к свойству "дочерняя модель-представления" у главной модели окна. Также в ресурсах, на пример, окна надо объявить набор DataTemplate'ов, где у каждого шаблона указать тип той модели-представления, которую он должен отображать. Таким образом, при смене значения свойства "дочерняя модель-представления" ContentControl будет искать шаблон, который будет отображать нужный тип данных - по сути, нужное отображение дочерней модели-представления. При этом всё это будет работать быстро и эффективно в согласии с шаблоном MVVM.
@just4n4cc174 жыл бұрын
@@Shmachilin Спасибо Вам огромное, все получилось. Отдельная благодарность за уникальный и качественный контент.
@oldschool24453 жыл бұрын
Немного не могу понять как менять свойства к которым мы делаем Binding из какого-нибудь метода, вот допустим свойство Status 1:50:20 которое тут показано, если я внутри своего метода создаю объект класса MainWindowViewModel vm = new(); далее устанавливаю свойству Status нужный текст vm.Status = "moy_text"; То при вызове этого метода сам текст в статус баре не меняется. Как правильно логикой менять значение свойств во ViewModel, чтобы элемент их сразу же отобразил после изменения.
@Shmachilin3 жыл бұрын
А где и зачем Вы создаёте MainWindowViewModel?
@oldschool24453 жыл бұрын
@@Shmachilin Создавал экземпляр MainWindowViewModel чтобы через него задать свойству Status какое-нибудь нужное мне значение (но так не сработало). Как мне сделать чтобы мой метод мог менять это свойство, а статус бар который прибинден к этому свойству после этого так-же мгновенно обновлялся.
@Shmachilin3 жыл бұрын
Вы не должны сами создавать эту модель. Её создаёт контейнер сервисов. Вам надо получить её экземпляр либо вытащив её из DataContext главного окна, либо из контейнера сервисов. Но скорее всего Вы в корне делаете что-то не так...
@oldschool24453 жыл бұрын
@@Shmachilin Вот смотрите для примера, я создаю новый класс class Testclass, в нём создаю метод TestMethod(), что мне нужно написать внутри моего TestMethod, чтобы изменить текст в статус баре, на какой-нибудь другой. (С учетом того что как в 1:50:20 у нас уже прибинден статус бар к свойству Status описанному в MainWindowViewModel
@Shmachilin3 жыл бұрын
Ваш класс должен быть либо сервисом приложения, зарегистрированным в контейнере сервисов. Тогда в его конструкторе Вы сможете добавить параметр TestClass(MainWindowViewModel model). Либо Вам надо получить доступ к главному контейнеру сервисов и из этого контейнера достать модель-представления главного окна.
@andrevyakin3 жыл бұрын
Спасибо за Ваш труд. Очень емко и информативно. Но решение в консольном проекте «yield return line.Replace("Korea,", "Korea -");» = костыль. Когда я изучал материал, в файле кроме Кореи появилась еще «Bonaire, Sint Eustatius and Saba» и все кранты. Вылетает с исключением. Полтора часа потратил, пока разобрался в чем дело и исправил 😊
@Shmachilin3 жыл бұрын
Это не костыли. Это специально разложенные грабли!
@oldschool24453 жыл бұрын
Спасибо что написал в комментах, а то тоже после исключения полез сразу сюда посмотреть ))
@АлексДжаванов3 жыл бұрын
А как исправили))? Дайте наводку))? Реплейс вначале через ковычки сделали почистили, а потом через запятую? Или сразу ковычки ловили через контейс и бегали от начальной до конечной, стирая/заменяя запятые?
@АлексДжаванов3 жыл бұрын
@@oldschool2445 удалось исправить))?
@shagov253 жыл бұрын
рядом вот такие грабли положил) var i = 0; if (!int.TryParse(cell[4], out int res)) i = 1; var Counts = cell.Skip(4 + i).Select(int.Parse).ToArray();
@kirillkuznetsov1593 жыл бұрын
Cпасибо!
@БлейрБурр2 жыл бұрын
Здравствуйте! Павел, подскажите, пожалуйста, я установил пробную версию решарпера, но, как я понял, там из коробки нет таких шаблонов, как notyfprop, цвета шрифтов другие и тд. Попытался покапаться в настройках, но их там настолько много, что голову сломаешь + еще расширения свои собственные. Можно ли как-то Ваши настройки решарпера получить или видео небольшое запилить по его возможностям?
@БлейрБурр2 жыл бұрын
Всё, спасибо, нашел в 3 части от Павла ссылку на шаблоны Мало ли у кого такой же вопрос возникнет: "Да. Скачать шаблоны можно отсюда: github.com/Infarh/CV19/files/5629522/ReSharper.Templates.zip"
@enderhexfyreeve19003 жыл бұрын
как-то не получается добавить солюшн с несколькими проектами как это сделано на видио. у меня такое предупреждение: your solution contains files outside the solution folder which will not be included. затем если предупреждение проигнорить то папки гита создасца в проекте, а не в папке солюшн. что с этим можно сделать? и на 14:26 окошко по-другому выглядит. нет "отправить в github" хотя учетная запись гитхаба прикреплена. подскажите, что там надо в настройках поменять? vs studio 2019 16.10.0.
@Shmachilin3 жыл бұрын
Галку не ставили при создании решения что бы размещать проект в папке решения?
@enderhexfyreeve19003 жыл бұрын
@@Shmachilin точно. в ней и была проблема. она сама по умолчанию была. а как сделать чтобы кнопка публикации на гитхаб была в тимэксплорере как на видио? у меня публикация только через раздел меню git работает. в принципе не так важно откуда публиковать, но может если подскажете, то лучше пойму настройки студии.
@TheDisJarpTV2 жыл бұрын
Действительно очень позновательно, это огрномный труд. Хотелось узнать только момент по поводу привязки команд. Дело в том что я искал решени кросплатформеных приложений на C#, и так получилось что начал изучать avalonia framework, который мне понравился. Так же он практически не отличается от WPF поэтому решили на основе ваших вебинаров разработать тестовое приложение на avalonia. И на моменте создания команд я не до конца понял для чего так сильно мучаться с интерфейсами, если можно привязать к обычным методам. Или это работает только на avalonia? И очень хотел бы узнать ваше отношение к данному framework, не будет такой ли вероятности что вы запишити курс по нему?
@Shmachilin2 жыл бұрын
Здравствуйте! Avalonia не смотрел... Времени не было. Но скорее всего идеи в нем те же. Что же касается интерфейсов, то это обеспечивает большую гибкость в использовании.
@АлексДжаванов4 жыл бұрын
Павел а в самом конце в упоминаете о чтате в телеге что за чат )? в него можно попасть )?
@Shmachilin4 жыл бұрын
@GB_CSharp
@АлексДжаванов3 жыл бұрын
@@Shmachilin павел нет такого канала или группы ( во всяком случаи в поиске ее не выдает ) возможно закрыта в настройках приватности с приглашением по ссылки ((
@BraentR2 жыл бұрын
Спасибо
@alexandrvint70982 жыл бұрын
Павел, подскажите пожалуйста, где можно основательно изучить технологию WPF с применением шаблона MVVM? В книгах очень все скудно, особенно с DataGrid.
@Shmachilin2 жыл бұрын
В своё время я по Метанит и professorweb.ru изучал. Но с книгами по этому делу (на русском) беда - да...
@АлексДжаванов4 жыл бұрын
Павел а можете подсказать почему Binding не видит комментарии ? у вас на видео Они видны, или это все решарпер а стандартными средствами видимость ограничена в пределах кассового наследования ?
@aRRma994 жыл бұрын
Да стандартный редактор VS убогий и много чего не показывает. Ставьте решарпер.
@АлексДжаванов4 жыл бұрын
@@aRRma99 дак решарпер денежки просит 😎
@aRRma994 жыл бұрын
@@АлексДжаванов на торрент загляните
@АлексДжаванов4 жыл бұрын
@@aRRma99 серьезно ))?
@Shmachilin4 жыл бұрын
Тяжёлые наркотики покупать только у дилера!
@SergNeoSM3 жыл бұрын
Спасибо огромное за ваши труды. Лучший материал на русском языке!
@antonkulikov67264 жыл бұрын
Уроки топовые. Есть пара вопросов: а что если UI у нас на wpf ,а вью модель на C++/cli. Причем проект сам на C++,а UI на wpf как dll ка подключается к проекту на C++/CLI. Будет ли в dll класс application,или может его можно как-то создать,через расширения разметки? Вью модель придется установить явно окну через. Data context? Спасибо!
@Shmachilin4 жыл бұрын
У Вас есть интерфейс пользователя (UI) - визуальная часть. А также может быть что угодно в любой форме написанное хоть на C++, хоть на Delphi, хоть веб-сервис. Для приложения это всё можно выделить в понятие "модели". И для того чтобы "подружить" "модель" с UI можно взять "модель" и обернуть её в оболочку - модель-представления. Давно принял для себя стратегию поведения: если что-то не получается сделать "в лоб", то надо уходить в абстракцию добавляя новую оболочку которую я могу контролировать. Создать класс-модель поведение которого я могу определить так как мне надо и внутри этого класса уже выполнить управление над тем объектом, который надо контролировать. А снаружи я получу интерфейс моего класса в том виде, в котором он мне нужен. (Паттерн Фасад это вроде бы я "изобрёл" в своё время). Также и тут. Если у Вас есть какая-то вью-модель, но она Вас по каким-то причинам не устраивает, то создавайте над ней оболочку - ещё одну вью-модель и уже эту модель-представления передавать в UI.
@antonkulikov67264 жыл бұрын
@@Shmachilin да . Именно так я и делаю. А можно ли класс application в dll на wpf в таком случае(например в вызове управляемого кода на C# из неуправляемого на C++) определить (то есть именно в dll-ке)?
@Shmachilin4 жыл бұрын
Нет ничего невозможного. Вопрос лишь в числе граблей на которые потребуется для этого наступить. Вот только зачем? Зачем тащить интерфейс внутрь логики?
@antonkulikov67264 жыл бұрын
@@Shmachilin тут такое дело... Есть проект на c++,с кучей легаси. К сожалению qt использовать нельзя. Поэтому в плане интерфейса выбора не так уж и много:либо mfc,но это та ещё боль. Либо wpf, но приходится как раз создавать абстракцию в коде c++/cli вью модель, которую и подсовывать ее. Вот такой вот колхоз...
@Shmachilin4 жыл бұрын
А главным запускаемым проектом должен быть обязательно проект на c++?
@feitan87454 жыл бұрын
Здравствуйте, вы можете добавить субтитры к своей серии MVVM?
@Shmachilin4 жыл бұрын
Здравствуйте! Пока наверное нет... не готов.
@TheMilliardo4 жыл бұрын
Подскажите пожалуйсто как забиндить TextBox к свойству типа double с UpdateSourceTrigger=PropertyChanged? При PropertyChanged не получаеться искользовать "точку". Я нашел где то решение на 3-4 класса ... Может быть есть что то по проще и короче?
@Shmachilin4 жыл бұрын
Есть такой костылик: добавить небольшую задержку на ввод следующей за точкой цифры. Text="{Binding TestValue, UpdateSourceTrigger=PropertyChanged, Delay=100}" Если пользователь не успеет за 100мс ввести цифру, следующую за точкой, то значение из свойства TestValue перечитано и точка будет отброшена. Задержку можно подобрать так как будет удобно.
@Юрчик-л8у2 жыл бұрын
момент с textbox ,почему то он не в какую не менялся ,ненаписать не удалить что в нем
@Shmachilin2 жыл бұрын
Где именно?
@Юрчик-л8у2 жыл бұрын
@@Shmachilin это уже вроде особо не нужно ,но сейчас пытаюсь кнопками влево вправо переключать ,не получается.Хотя вроде бы все прописал
@Saveaaa4 жыл бұрын
У меня 2 вопроса. В приложении главное окно, в котором реализованно переключение между 5 пейджами. в каждом page по 2 listView и 1 datagrid , 3 диалога для добавления данных , 1 для вывода сообщений, плюс поля для отображения доп информации при выборе какой либо строки, диалог на удаление, сюда же biningи visibl и enable и на selectValue. Так вот это тонна биндингов и переменных. такая тонна, что уже кажется , что что-то пошло не так и это бред. Это норм для mvvm с сложным ui? Если это можно назвать сложным. Или я что то не так делаю? И второй вопрос- у вас в программе для самолётов было много окон , которые зависили от графика и информация в них отображалсь исходя из графика. Как и наоборот когда вы нажимали на плей на окне с приборами все начинало двигаться, включая график. Как это реализованно? Это дочерние окна?
@Shmachilin4 жыл бұрын
Добрый день! Вы можете разбивать представление на вложенные элементы - выделять повторяющиеся части в отдельные компоненты. И да, привязок там может быть очень много. А в том приложении есть объект плеер, который "двигает" время, есть объект "сервер индикации", который ловит изменения времени в плеере (обрабатывает событие), читает данные из контейнера значений и отсылает данные клиентам. Клиенты имеют набор свойств к которым привязываются визуальные индикаторы.
@Saveaaa4 жыл бұрын
@@Shmachilin когда открывается новое окно с клиентом . Вы туда передаете DataContext ? Или как новые окна получают увеломления о событиях или новые данные?
@Shmachilin4 жыл бұрын
Когда открывается новое окно, то для него создаётся его собственная модель-представления. Модель-представления дочернего окна может подписаться на события модели-представления родительского окна. Либо модель-представления родительского окна может сохранить себе ссылку на модель-представления дочернего окна и передавать ей данные.
@Saveaaa4 жыл бұрын
@@Shmachilin понятно, спасибо
@Shmachilin4 жыл бұрын
Отпишитесь по результатам.
@eatpasta97636 ай бұрын
Наконец-то наткнулся на клад!
@oliviacolins68564 жыл бұрын
Подскажите, каким образом можно отобразить данные в реальном времени не перезапуская программу? т.е. есть БД откуда берутся данные и отображаются в программе в момент запуска программы. Как только в БД попадают новые данные из вне, приложение их не отображает. Только при перезапуске программы... Подскажите, как можно сделать чтоб при изменение значений в БД, сразу это отображалось в программе?
@Shmachilin4 жыл бұрын
А к БД Вы как подключаетесь? Что мешает сделать кнопку/таймер и выполнить эту процедуру вновь в процессе работы программы и загрузить данные снова?
@oliviacolins68564 жыл бұрын
@@Shmachilin Спасибо, вроде на данном этапе разобралась. А так подключалась через EntityFramework, проблема была что получала от EntityFramework те же данные, а не обновленные и сделала кнопку обновить, как вы рекомендовали. Теперь думаю как реализовать все это дело через таймер, потому как не хочу получать данные при клике на кнопку обновить. Спасибо за очень ценный материал.
@damascake2 жыл бұрын
Ставь лайк, если ты на 3:40:00 тоже кричал автору в монитор, что он уже распарсил строку, у него уже массив, кавычки можно удалять.
@alexandrsharp9203 жыл бұрын
а какие у вас дополнения для студии ? в частности внизу что то похожее на счетчик ресурсов
@Shmachilin3 жыл бұрын
Справа снизу информацию выводят РеШарпер и PerfWatson Mon marketplace.visualstudio.com/items?itemName=PaulHarrington.PerfWatsonMonitor-9621
@alexandrsharp9203 жыл бұрын
@@Shmachilin спасибо!
@abrajmek_zalilov2 жыл бұрын
Здравствуйте, автор! Спасибо за Ваши старания. Подскажите пожалуйста, на сколько это всё актуально на сегодня, ведь sdk уже и 5.0 и 6.0 уже существуют... Надо ли мне обязательно и 3 версию ставить?
@Shmachilin2 жыл бұрын
Здравствуйте! Всё актуально. Используйте последнюю версию Visual Studio и SDK .Net
@abrajmek_zalilov2 жыл бұрын
@@Shmachilin спасибо за оперативный ответ! Перехожу из вэба на C# и десктопные приложения, хочу заниматься разработкой VST и другой работой со звуком. Нашёл Ваш канал, он как никогда кстати. Хороший вход... Уж не Гоша Дударь, прости г-ди.
@vyachgusev Жыл бұрын
@@Shmachilin я только сейчас присоединяюсь к прохождению ваших нереально крутых образовательных видео! а если уже .net 8.0 есть? его можно использовать? и спасибо за уроки! гоша дударь курит в сторонке...
@Shmachilin Жыл бұрын
@@vyachgusev там концептуально ничего не поменялось. Синтаксис интереснее стал.
@rdragon587 Жыл бұрын
Cool
@hikkathon4 жыл бұрын
Пытался сделать свою команду "Свернуть окно приложения"(MinimizedApplicationCommand) для практики, не вышло( на прямую в xaml окна всё получается this.WindowState = WindowState.Minimized; а через команду не могу сообразить как хD
@Shmachilin3 жыл бұрын
Надо смотреть как Вы пытались её сделать... Надо либо ссылку на ГитХаб, либо хотя бы фрагмент кода. Иначе там много что может пойти не так.
@josbexerr51663 жыл бұрын
Gracias Mister....saludos de los andes peruanos.... la próxima activa el subtitulo....
@ЛинарГайнутдинов-т2э3 жыл бұрын
Добрый день! Я просмотрел половину видео и местами бывает не совсем понятно. Хотелось бы узнать для людей с каким уровнем знаний рассчитан данный урок? И достаточно ли будет этих знаний, чтобы трудостроиться в IT компанию ?
@Shmachilin3 жыл бұрын
Здравствуйте! Ну как минимум требуется уметь отличать абстрактный класс от интерфейса и знать базовое представление о паттернах проектирования (что они хотя бы есть...) Достаточно ли этого будет для трудоустройства сказать сложно.
@shlm36504 жыл бұрын
Как сделать отдельную команду "ChangeTabIndexCommand" , что бы можно было через "Window.Recources" ?
@Shmachilin3 жыл бұрын
У команды есть параметр. Можно передать TabControl в качестве параметра.
@Андрей-ы7ю4х3 жыл бұрын
Подскажите, пожалуйста, есть ли исходники RRG-Express?
@Shmachilin3 жыл бұрын
Исходники есть.
@Андрей-ы7ю4х3 жыл бұрын
@@Shmachilin можете дать ссылку, пожалуйста? Очень заинтересовали некоторые функции, хочется посмотреть на реализацию)
@Shmachilin3 жыл бұрын
Ссылку дать не могу. Коммерческий продукт ГСС. Могу ответить на вопросы.
@vanovano90563 жыл бұрын
Когда команда CloseApplicationCommand определена как класс в отдельном файле, то как ресурс она объявляется Как объявить ее ресурсом если она определена в ViewModel? Спасибо.
@Shmachilin3 жыл бұрын
Если она часть модели-представления, то зачем её надо "закреплять" в ресурсах? Есть ведь модель-локатор...
@vanovano90563 жыл бұрын
@@Shmachilin Если команда объявлена как отдельный класс, то экземпляр команды создается для каждого упоминания ее в разметке, чтобы этого не произошло мы используем ее как ресурс, т.к. в этом случае экземпляр команды создастся единожды. Когда команда часть ViewModel, то созданием команды рулим мы сами, создаем ее в конструкторе 1 раз. Правильно я понял?
@Shmachilin3 жыл бұрын
Через разметку никак. В коде - можно в ресурсы добавить что угодно. Один вопрос: а зачем?
@vanovano90563 жыл бұрын
@@Shmachilin Сейчас вопрос зачем уже не стоит. Сразу после просмотра это было не совсем понятно ;)
@АнонАнон-щ3э3 жыл бұрын
а почему поля классов с большой буквы? Просто такой стиль написания кода? Просто вроде общепринято с маленькой обозначать
@Shmachilin3 жыл бұрын
Для имён перечислений, структур, делегатов, классов, членов классов (полей, свойств, методов), а также входных переменных метода принят PascalCase. Для локальных переменных - lower_case. camelCase - это стиль Java.
@АнонАнон-щ3э3 жыл бұрын
@@Shmachilin спасибо, я просто смотрел и другие c# уроки, везде не много по разному
@kavelquu3 жыл бұрын
@@Shmachilin эм нет, во всех coding conventions (в том числе и от самих microsoft) lower_case никогда не использовался в C#. В C# используют только PascalCase и camelCase, lower_case нет
@TbIPDblM2 жыл бұрын
Технически все понятно, но я ахаюсь только с одним пунктом, делаю все как по видео создаю WPF проект, создаю реп заливаю на гитхаб, но при добавлении /Tests/ WPF и консольного проектов, их не видит гит (и в дальнейшем работая на др компе при получении реп папка tests пустая), либо они отображаются в проекте основном.
@Shmachilin2 жыл бұрын
Галочку поставили в диалоге создания первого проекта о размещении всех файлов в одном каталоге? Ссылку на ГитХаб репозиторий дайте посмотреть.
@TbIPDblM2 жыл бұрын
@@Shmachilin не ставил 😬🫤завтра свежим взглядом погляжу, спасибо 🫡
@Shmachilin2 жыл бұрын
@@TbIPDblM ссылку скиньте.
@TbIPDblM2 жыл бұрын
@@Shmachilin разобрался, при создании у меня первого проекта файл решения там же располагался, галочку снял, и все стало ок
@Shmachilin2 жыл бұрын
Теперь и Вы знаете о этих граблях. Я бы руки оторвал тому кто эту галочку там разместил.
@amoe43334 жыл бұрын
Делаю все тоже самое но на моменте записи MainWindowViewModel: ViewModel выходит ошибка ''ViewModel" является пространство имен, но используется как тип." Не могу понять почему P.S Бред. Создал новый проект, все работает, а в старом почему-то нет... Ох уж этот visualstudio.
@Shmachilin4 жыл бұрын
По всей видимости у Вас пака, в которой лежат модели-представления, называется "ViewModel", а не "ViewModels". В результате было создано пространство имён "ViewModel" (в единственном числе), совпадающее с именем класса.
@ДмитрийСкареднов-н8р2 жыл бұрын
WPF жив? Если да, то наверно сплошное легаси?
@Shmachilin2 жыл бұрын
Вы с чего взяли?
@ДмитрийСкареднов-н8р2 жыл бұрын
@@Shmachilin я не знаю, вот и спрашиваю
@Dorin-Baba4 жыл бұрын
❤
@뽓따나 Жыл бұрын
😀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 Жыл бұрын
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 -"); } }
@wastegate7114 жыл бұрын
На рабочем столе заставка из Eve Online.
@Shmachilin4 жыл бұрын
Nemesis
@mvzex3 жыл бұрын
52:00
@maxm10793 жыл бұрын
качественный материал, то что есть на itdvn невозможно слушать из за зелености самого доклачика и не поставленного голоса.
@wasknocked4 жыл бұрын
Стыдно - ничего не делать!!
@sergeyzaboryev4 жыл бұрын
И назовём его CV-19. Мне одному это кое-что напоминает?