Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Пятница или чего может студент наворотить

671  
AlexNek патриот26.07.19 20:00
AlexNek
NEW 26.07.19 20:00 

Задачка предельно простая. Есть "правильная" WPF формочка с настройками для импорта.

Скажем, есть 3 чек бокса 1,2,3. Если выбирается 1 или 2, то третий должен выбраться автоматом и не позволить себя переключить. При отключении и 1 и 2, 3 можно переключать.

Какие изменения вы бы ожидали увидеть, если форма до этого была рабочая, но только не было описанного функционала?

Потраченное время, включая три переделки, уже не менее двух дней и обиделись что сильно много хочу - правильно же ведь теперь и работает. А вот что бы вам хотелось увидеть?

#1 
Murr патриот27.07.19 10:44
Murr
NEW 27.07.19 10:44 
в ответ AlexNek 26.07.19 20:00

А вот что бы вам хотелось увидеть?

-----

Не увидеь, а услышать - стандартный вопрос молодого прогера - А что я должен тут сделать?

До вопроса - Как именно это нужно имплементировать? - еще 3-4 смены работодателей...

#2 
AlexNek патриот27.07.19 13:16
AlexNek
NEW 27.07.19 13:16 
в ответ Murr 27.07.19 10:44

Ну естественно, ожидается какое стандартное решение в дополнение к тому что имеется. А имеется вполне нормальный код в соотвествии с текущими веяниями. Или есть еще непонятки по постановке задачи? В таске и картинки есть.

Мне просто интересно узнать как бы обычный разработчик решил эту задачу. Поэтому не хочу пока ни свое ни студента решение приводить.

Можешь пока угадать какое было первое решение студента, хоть ты с WPF вроде не знаком, но 1 решение точно знаешь.

#3 
Срыв покровов коренной житель27.07.19 19:00
NEW 27.07.19 19:00 
в ответ AlexNek 26.07.19 20:00

Сделать в ViewModel свойство с геттером типа

IsFirstOrSecondChecked => IsFirstChecked || IsSecondChecked

И в XAML привязать его на IsEnabled третьего Checkbox‘а

#4 
AlexNek патриот27.07.19 19:52
AlexNek
NEW 27.07.19 19:52 
в ответ Срыв покровов 27.07.19 19:00, Последний раз изменено 27.07.19 20:19 (AlexNek)

Хоть в примере и не всё учтено но, типа этого и ожидалось, там еще есть небольшие ньюансы, но это уже не важно. Работы на почти ничего.

То бишь нет вроде требований монстра. смущ

Что же получили?

Конвертер делающий логическую операцию And над двумя значениями (привязанный на IsEnabled третьего Checkbox‘а) и ICommand привязанный к двум остальным чекбосам. Отчего "энд" уже не помню, надо будет этот шедевр скопировать на память.

Попутно было типа следующего шок

ICommand GetCommand {get new RelayCommand(Operation);}

который потом переделали в "синглтон паттерн".

И в Operation проверяется текущее значение чекбокса...

Конвертер поначалу был типа value[0] && value[1], затем это улучшили на цикл с выходом по false.


Другой коллега говорит какого ты выпендриваешься - всё ведь работает, ошибок нет. Также тоже правильно... спок


Если еще есть какая то надежда что молодого можно еще научить, то если бы вдруг попался пожилой юниор, то нафиг с ним еще мучится? Это вдогонку к популярным темам, что можно быстро научится самому языку.


#5 
AlexNek патриот27.07.19 20:11
AlexNek
NEW 27.07.19 20:11 
в ответ AlexNek 27.07.19 19:52

Похоже "индия" старается вовсю догнать наших студентов.

https://www.c-sharpcorner.com/article/checkbox-binding-in-...

#6 
Murr патриот29.07.19 10:04
Murr
NEW 29.07.19 10:04 
в ответ AlexNek 27.07.19 13:16

Можешь пока угадать какое было первое решение студента, хоть ты с WPF вроде не знаком

------

Именно. Не знаком с WPF. Гадать что делалось - бессмысленно.


1 решение точно знаешь.

------

Разделить презентационную часть и логику изменения состояния. Разумеется.

Что слепил студент - фиг его знает. Могу предположить что что-то соответствующее примерам от мелкомягких...

#7 
AlexNek патриот29.07.19 21:06
AlexNek
NEW 29.07.19 21:06 
в ответ Murr 29.07.19 10:04
Разделить презентационную часть и логику изменения состояния. Разумеется.

ну ты загнулшок, сколько придется дней рассказывать про это отличие?

Winforms разве тоже мимо тебя прошел? Вот именно как там и было сделано, хотя все знают, что пользуем MVVM

#8 
Murr патриот30.07.19 09:02
Murr
NEW 30.07.19 09:02 
в ответ AlexNek 29.07.19 21:06

что пользуем MVVM

-----

Это мне тоже еще учить...

Времени ни на что нету... Вчера хоть одну маленькую фигню сбагрил - теперь можно загружать смешаные старые/новые странички. Мне про это дело всю плешь проели... Теперь можно остальное подтягивать - не будут конфликтовать...

#9 
AlexNek патриот30.07.19 21:18
AlexNek
NEW 30.07.19 21:18 
в ответ Murr 30.07.19 09:02
Времени ни на что нету

Знакомо, но если что, всегда рад...


Я вот тоже простую казалось задачу не могу довести до ума. Нужно просто вывести в лог время отрисовки операции инициируемой пользователем с некоторыми ограничениями...

Функции к сожалению, не синхронные и доступа к "главной" функции "не дают".

#10 
Программист коренной житель06.08.19 12:15
NEW 06.08.19 12:15 
в ответ AlexNek 26.07.19 20:00
Какие изменения вы бы ожидали увидеть, если форма до этого была рабочая, но только не было описанного функционала?

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");)

#11 
AlexNek патриот06.08.19 21:03
AlexNek
NEW 06.08.19 21:03 
в ответ Программист 06.08.19 12:15

Ну замечательно, я действительно не ожидал никакой фантастики. Все приходят к ожидаемым результатам. Где то это я пытался донести до народа.

И маленький ньюанс заметили, из-за которого я подозреваю, "кричали", что так как мне хочется не работает. glass


Кстати, 4.5 вам можно пользовать? Тогда можно так записать, если базовый класс чуть изменить

SetField(ref checkBox3State, value);


#12 
Программист коренной житель07.08.19 11:01
07.08.19 11:01 
в ответ AlexNek 06.08.19 21:03
Кстати, 4.5 вам можно пользовать?

Нет, нельзя :(

#13 
AlexNek патриот07.08.19 19:46
AlexNek
NEW 07.08.19 19:46 
в ответ Программист 07.08.19 11:01
Нет, нельзя

Абидно, долго я как то шефа убеждал, что нефиг ориентироваться на тех кто будет софт на ХП заказывать.

Посмотрел он наконец статистику, поспрашивал клиентов и сказал хрен с вами.

#14 
AlexNek патриот09.08.19 22:06
AlexNek
NEW 09.08.19 22:06 
в ответ AlexNek 07.08.19 19:46

Как ни странно, история продолжается, сегодня в конце дня получил на ревью новую версию. Написано, что убран ICommand и конвертер.

Глянул по быстрому - да убрали, но зачем-то всунули перегруженную функцию. (В базовом классе есть общий enable, который не был виртуальным, но изменили), и еще дополнительную функцию вызывают после "обновления" проперти, ну и еще по мелочам.

Хм, как же быстро научить не делать заумно?


#15