MVVM - pro & contra
если вы еще не работали с wpf, но хотите въехать, я бы порекомендовал прочитать/проработать эту книгу:
https://mehmetakifsonmez.files.wordpress.com/2013/12/wpf-4...
я эту редакцию еще не видел, сам учился по первому изданию, эту просто нагуглил специально для вас : )
да, про мввм там ничего нет, но это уж вы сами поищите, если есть интерес. а о binding'ах здесь очень хорошо изложено. потом, после этой книги (или одновременно) - вот очень толковое и подробное чтиво:
https://www.codeproject.com/Articles/23772/WPF-A-Beginner-...
а пример я просто так привел, чтобы проиллюстрировать, что мввм не всегда удобный. его идея
- мы не пытаемся менять/опрашивать наши данные из когда диалога
- мы не организовываем наши данные в угоду удобства их визуализации и вообще об их визуализации здесь ничего не знаем.
- для этого мы создаем нечто между гуи и данными, что знает обе стороны: с одной стороны это (в мввм это называется вью-модель) знает как огранизованы данные, с другой стороны содержит объекты, к которым вью может прицепиться binding.
идея правильная, но ее не обязательно нужно реализовывать, жестко разделяя все приложение на вью, вьюмодель и модель. реальные задачи богаче и разнообразнее, чем те, которые удобно реализовывать по этой схеме. чаще нужно просто эти принципы (известные задолго до впф и мввм) не забывать и руководствоваться здравым смыслом, а не пытаться непременно запихнуть все в прокрустово ложе какого-нибудь пэттерна.
приведенный мной пример также можно реализовать как мввм, но прийдется нагородить сущностей, которые будут служить только для того, чтобы эту логику, которую можно отнести и к
"бизнес-", и к гуи, поместить "как положено" во вьюмодель, и все нас похвалили за "правильность". но это будет менее удобно, чем делать все, не вспоминая о мввм.
https://www.visualstudio.com/vs/community/
2010 у меня уже давно нет. Ладно тогда ехешник закину. А код можно и так глянуть.
если вы еще не работали с wpf, но хотите въехать
Спасибо за заботу, гляну.
У меня стадия немного другая - я не знаю многих ньюансов и не делаю многое на "автомате".
Имелось в виду, что сделанный мной пример можно в WPF реализовать "правильнее" чем это сделал я.
я бы для эксперимента попроще держался. давайте заменим содержимое вашего grid на это:
(вставлю файл)
(вставлю файл)
вот кнопочки уже и перекрашиваются. примитивным образом. для "одноразовых" задач - сойдет, но я бы не непосредственно цвет менял, а сделал бы производную кнопку, добавил ей dependency property "isSelected", и в стиль вставил триггер, который бы выбирал цвет в зависимости от значения.
но это - не то, чем мы сейчас увлечены. нам вроде как интересно подумать, куда же воткнуть "правила" выбора кнопок. самое простое - поямо в код окна. это - быстро и просто, но это - только если если делаем "одноразовку". а чтобы было хорошо, такой подход не годится, нужно вынести это куда-нибудь. вариантов - много. ждем предложений.
кстати, если сразу настроиться, что "мввм для впф - эакон", то нужно начинать углубляться, строить модель, куда помещать данные (видимо, некий набор выбранных значений), создавать вьюмодель, где имплементировать некие объекты, к которым можно было бы прицепить состояние кнопок, и команды, к которым прицепить свойство Command от кнопок, и убрать нафиг button_click и прочее из кода окна. все переедет во вьюмодель, будем в Execute() ловить, которая кнопка нажата и проставлять по правилам свойства у объектов, к которым привязаны свойства isSel & IsEnabled всех кнопок.
до сих пор все не так уж сложно (хотя "в лоб" - значительно проще). гдавное начнется, когда мы захотим нажать на "дуит", и захотим видеть прогресс.
шайсе! не знал, что квота все выравнивает влево :
( сейчас, если разбурусь, как аттачить файлы, прицеплю...
А нельзя ли выложить полный 2010 проект?
Потому как после простой замены cs файла и части хамл (что кстати совсем не ожидал, всегда ожидаю "целый" файл) ничего вообще не компилируется.
Но вообще то, как и ожидал, все закинулось в одну кучу. Естественно, что в этом случае никакие "нормальные" паттерны не помогут. Дело в том что я/мы так не делаем никогда.
Ну и нагружать вьюв "хамловской логикой" я лично просто ненавижу, возможно сказывается дурное воспитание винформс.
Весь смысл attached property в том, чтобы добавлять свойства классам без создания их наследников. Если вдруг понадобится свойство IsSelected присобачить другим элементам, то в случае с attached property ничего делать больше не надо - класс-то готов уже. А по вашему варианту придётся создавать наследников для всех этих элементов.
я так сделал, чтобы показать, что такое "в лоб".
Спасибо что пояснили, потому как у меня совершенно другое представление как это делать в "лоб". В любом случае, старт был такой же как я выложил раньше.
Потому как подобный "бардак" не признается ни как каком уровне. Разве что тест для изучения чего либо.
Давайте тогда свой "старт", будет интересно глянуть.
причина где-то в хамл-коде.
не думаю, хамл то без проблем открывается в дизайнере студии. Единственный способ, который нашел раньше. Переименовать старый файл, создать новый с требуемым именем и все туда перенести со старых.
Я вот так и не понял, как бороться с подобной ситуацией, делаешь, что то то делаешь, а после хамл не грузится - кричит давай проект перекомпилируй. Приходится пол хамла комментировать (иногда копировать куда то), компилировать, а после восстанавливать.
Что то явно со студией. Сегодня десяток раз вылетала на открытии "попорченного" проект, а теперь и вовсе не хочет грузится. Счас пробую переинталлировать.
Кстати, пока не смог решить проблему с изменением цвета кнопки после нажатия. То бишь цвет кнопки то меняется, НО только после того как мышка уйдёт с данной кнопки. Хотелось бы чтобы цвет изменился сразу после нажатия кнопки мышки (уже и с триггером пробовал, всё равно не получается). Где нахомутал пока не понял.
Кстати, пока не смог решить проблему с изменением цвета кнопки после нажатия. То бишь цвет кнопки то меняется, НО только после того как мышка уйдёт с данной кнопки.
для этого я вам кусок кзэмыла прицепил, где поменял стиль этих кнопок. верните назад, и кнопка перестанет реагировать на наведение мышью.