Пятница или чего может студент наворотить
Задачка предельно простая. Есть "правильная" WPF формочка с настройками для импорта.
Скажем, есть 3 чек бокса 1,2,3. Если выбирается 1 или 2, то третий должен выбраться автоматом и не позволить себя переключить. При отключении и 1 и 2, 3 можно переключать.
Какие изменения вы бы ожидали увидеть, если форма до этого была рабочая, но только не было описанного функционала?
Потраченное время, включая три переделки, уже не менее двух дней и обиделись что сильно много хочу - правильно же ведь теперь и работает. А вот что бы вам хотелось увидеть?
Ну естественно, ожидается какое стандартное решение в дополнение к тому что имеется. А имеется вполне нормальный код в соотвествии с текущими веяниями. Или есть еще непонятки по постановке задачи? В таске и картинки есть.
Мне просто интересно узнать как бы обычный разработчик решил эту задачу. Поэтому не хочу пока ни свое ни студента решение приводить.
Можешь пока угадать какое было первое решение студента, хоть ты с WPF вроде не знаком, но 1 решение точно знаешь.
Хоть в примере и не всё учтено но, типа этого и ожидалось, там еще есть небольшие ньюансы, но это уже не важно. Работы на почти ничего.
То бишь нет вроде требований монстра.
Что же получили?
Конвертер делающий логическую операцию And над двумя значениями (привязанный на IsEnabled третьего Checkbox‘а) и ICommand привязанный к двум остальным чекбосам. Отчего "энд" уже не помню, надо будет этот шедевр скопировать на память.
Попутно было типа следующего
ICommand GetCommand {get new RelayCommand(Operation);}
который потом переделали в "синглтон паттерн".
И в Operation проверяется текущее значение чекбокса...
Конвертер поначалу был типа value[0] && value[1], затем это улучшили на цикл с выходом по false.
Другой коллега говорит какого ты выпендриваешься - всё ведь работает, ошибок нет. Также
тоже правильно...
Если еще есть какая то надежда что молодого можно еще научить, то если бы вдруг попался пожилой юниор, то нафиг с ним еще мучится? Это вдогонку к популярным темам, что можно быстро научится самому языку.
Похоже "индия" старается вовсю догнать наших студентов.
https://www.c-sharpcorner.com/article/checkbox-binding-in-...
Можешь пока угадать какое было первое решение студента, хоть ты с WPF вроде не знаком
------
Именно. Не знаком с WPF. Гадать что делалось - бессмысленно.
1 решение точно знаешь.
------
Разделить презентационную часть и логику изменения состояния. Разумеется.
Что слепил студент - фиг его знает. Могу предположить что что-то соответствующее примерам от мелкомягких...
что пользуем MVVM
-----
Это мне тоже еще учить...
Времени ни на что нету... Вчера хоть одну маленькую фигню сбагрил - теперь можно загружать смешаные старые/новые странички. Мне про это дело всю плешь проели... Теперь можно остальное подтягивать - не будут конфликтовать...
Времени ни на что нету
Знакомо, но если что, всегда рад...
Я вот тоже простую казалось задачу не могу довести до ума. Нужно просто вывести в лог время отрисовки операции инициируемой пользователем с некоторыми ограничениями...
Функции к сожалению, не синхронные и доступа к "главной" функции "не дают".
Какие изменения вы бы ожидали увидеть, если форма до этого была рабочая, но только не было описанного функционала?
1) В ModelView должна появиться проперти IsCheckBox3Enabled и соответствующая OneWay привязка
public bool IsCheckBox3Enabled { get { return !(CheckBox1State && CheckBox2State); } }
2) Расширение проперти CheckBox3State до
private bool checkBox3State = false; public bool CheckBox3State { get { if (!IsCheckBox3Enabled) return true; return checkBox3State; } set { SetField(ref checkBox3State, value, "CheckBox3State"); } }
3) Сеттеры CheckBox1State и CheckBox2State должны быть расширены, чтобы нотифицировать об изменении IsCheckBox3Enabled (например так: SetField(ref checkBox1State, value, "CheckBox1State", "IsCheckBox3Enabled");)
Ну замечательно, я действительно не ожидал никакой фантастики. Все приходят к ожидаемым результатам. Где то это я пытался донести до народа.
И маленький ньюанс заметили, из-за которого я подозреваю, "кричали", что так как мне хочется не работает.
Кстати, 4.5 вам можно пользовать? Тогда можно так записать, если базовый класс чуть изменить
SetField(ref checkBox3State, value);
Как ни странно, история продолжается, сегодня в конце дня получил на ревью новую версию. Написано, что убран ICommand и конвертер.
Глянул по быстрому - да убрали, но зачем-то всунули перегруженную функцию. (В базовом классе есть общий enable, который не был виртуальным, но изменили), и еще дополнительную функцию вызывают после "обновления" проперти, ну и еще по мелочам.
Хм, как же быстро научить не делать заумно?