|
Модератор
|
|||
Использование Code Behind Окна: допустимо и, если да, то в каких случаях?17.01.2021, 13:04. Показов 13370. Ответов 167
Метки нет (Все метки)
Тема создана из исходной Генерация имён при генерации элементов
Собственно вопрос данной темы это сообщение: Прошу воспринимать тему не как "Священные войны", а попытку разобраться в этом вопросе, когда на практике не совсем понятна цель "запрета" на использование CB. Особенно интересует мнение тех кто реально работает программистом в софтверной компании и знает на практики нюансы коллективной, корпоративной работы, проблемы поддержки выпущенного софта. Возьму на себя смелость специально "пригласить": Usaga, Rius, kolorotur, Рядовой, proa33, novikov.ea, escoult. В WPF есть шаблоны элементов и шаблоны данных. А то, что вы показали - это чёрт знает, что. Но точно не шаблон. Шаблоны задаются ИСКЛЮЧИТЕЛЬНО на XAML. XAML - это основной язык WPF. Code Behind в WPF не используется. Он должен оставаться пустым. Вообще забудьте, что он существует и никогда даже не открывайте файлы "*.xaml.cs".
0
|
|||
| 17.01.2021, 13:04 | |
|
Ответы с готовыми решениями:
167
Написание GUI руками, без привлечения специализированных фреймворков - нужно ли и если да, то в каких случаях? |
| 20.01.2021, 22:56 | ||||||||||||
|
Лучше на примере. Допустим: 1. Функционал прикладной системы реализован набором UserControl (панелей). 2. Каждый пользователь свои права для работы с приложением - может быть разрешена работа не со всеми панелями. 3. Каждой панели поставлена в соответствие Кнопка и вызов панели осуществляется обработкой события Click. 4. По умолчанию кнопки задаются так (не знаю как задать форматирование XAML):
0
|
||||||||||||
|
Модератор
|
|||||
| 20.01.2021, 23:33 [ТС] | |||||
|
Можете на любом языке создать необходимые библиотеки и использовать их в проекте в котором кроме XAML нет ни строчки на другом языке. Но в любом WPF проекте ОБЯЗАТЕЛЬНО будет XAML - поэтому он и основной язык. То есть он не заменим для WPF. Добавлено через 11 минут Судя по вашему коду и объяснениям, вы просто плохо знаете XAML и другие азы WPF. Это одна из основных причин рекомендации начинающим "Никогда даже не открывать Code Behind". К сожалению у нас очень плохо изучают и используют ООП, а говорить за преподавание WPF - даже смысла нет. Фактически все кто нормально его может использовать - самоучки. Поверьте, если вы для практике создадите десяток-другой приложений средней руки без использования CB, со всеми финтифлюшками WPF (анимации, триггера, Behavior, AP/DP свойства и т.д.) вам откроется многое о чём вы и не подозревали.
Добавлено через 5 минут WPF (в том числе и XAML) - это инструмент построения Представления, включая не только само отображение данных, но и логику Представления (действия, команды, события, адаптивность и т.д.). С исходными данными WPF не должна работать. И если брать целиком WPF Решение, то собственно WPF - это только малая часть (единицы процентов) от кода всего Решения. В том же WPF обязательно кроме XAML будут использоваться и другие языки, так как на все случаи жизни ни в каких библиотеках заранее готовых типов не хватит. Часть типов всё равно придётся писать кастомно самому. Добавлено через 53 секунды Но использоваться в WPF эти типы потом всё равно должны на XAML.
0
|
|||||
| 21.01.2021, 11:45 | |||
|
Только я предпочитаю код сравнивать смысл программного кода, а не художественное бла...бла...бла. Прстенькая же задача - нужно динамически, в соответствии с правами пользователя для данного приложения, представить ему на MainWindows кнопки выбора функционала - информационных панелей. Панель доступна пользователю, если он может или лицезреть посредством её информацию или редактировать информацию посредством её . Я привел код, Вы рассуждения. Приведите код. Сравним. Привел в блоге вариант решения задачи устойчивости (слабой зависимости) прикладного приложения по отношению к замене базы данных - источника данных. Привел код решения. Если перед Вами вставала подобная задача, приведите код решения. В перспективе хочу привести вариант построения прикладного приложения WPF без применения MVVM. Хотелось бы сравнить с подобным. Добавлено через 9 минут
0
|
|||
|
Модератор
|
|||||
| 21.01.2021, 12:33 [ТС] | |||||
|
Оно происходит по каким-то заранее определённым сравнивающим критериям. Если мы сравниваем разные реализации задачи для WPF Решения - какие у нас должны быть критерии? Для начала, что такое WPF? - Это часть платформы Net. А что такое Net? - Это платформа построена специально для облегчения реализации решении в ООП. А что такое ООП? - Это концепция программирования направленная на корпоративное, коллективное программирование, помогающая улучшить прозрачность, читаемость кода, его понимание не только для его автора, но и для сторонних программистов, облегчения поддержки приложения после выпуска, его модернизации. По этой причине ООП - это не только Объекты. Это ещё и ряд дополнительных правил. В первую очередь SOLID. По этим причинам нельзя по одним критериям сравнивать реализацию на Фортране и Шарпе. Это концептуально разные языки. И выбор критериев сравнения уже заранее определяет "победителя". А как влияет ООП на Решение в целом? В первую очередь, это разделение Решения на отдельные функциональные слои. Самые распространённые паттерны ООП для Решений - это MVC и MVP. Поэтому Решение на C# (как и на любом другом Net языке) должно ОБЯЗАТЕЛЬНО реализовывать один из таких паттернов. Для WPF самым удобным является паттерн MVVM. Он специально создан для облегчения реализации WPF Решений и учитывает особенности WPF. Главные особенности WPF: - Наличие специально выделенного свойства для поставки данных (Контекста Данных): DataContext; - Получение значений элементами через Привязки. По умолчанию источниками привязок служит Контекст Данных; - Автоадаптивность размеров и размещения элементов в родительском контейнере. По этой причине НЕЛЬЗЯ использовать свойство Margin для позиционирования UI элементов; - Разделение логики (поведения) и визуальной формы UI элементов. Первое задаётся на вспомогательном языке, второе в шаблоне на XAML; - Независимые Логические и Визуальные Дерева элементов. Так же есть ряд второстепенных, но широко используемых в WPF методов, типов: шаблоны данных, стили, триггера, AP/DP свойства, команды, INCC/INPC, конвертеры и др. Теперь выработаем критерии сравнении для реализации WPF Решений: 1) Код должен быть легко понятен не автору, а другим программистам. В сообществе WPF программистов сложилось определённые правила создания таких реализаций. И создание кода вне этих правил ухудшает его понимание. В том числе, он значительно уменьшает вероятность получения помощи по возникшей проблеме, поскольку "продвинутые" программисты часто помогают в типовых, понятных реализациях, но разбираться в логике горы костылей, вряд ли, захотят. 2) Компоновка UI элементов должна быть адаптивной. Не абсолютно, но хоть в каких-то границах. Иначе нет смысла, вообще, использовать WPF - проще будет воспользоваться Формами. 3) Большая часть кода обращающаяся к UI элементам должна быть реализована на XAML. Использование вспомогательного языка допускается только там где это невозможно реализовать средствами XAML. 4) Обязательно разделяется визуальная часть (представление) и логическая (модель). Добавлено через 4 минуты Ответ очевиден из:
1
|
|||||
|
Модератор
|
|||
| 21.01.2021, 13:07 [ТС] | |||
|
Есть паттерн Репозиторий (Данных) - он уже давно и широко используется. Даёт независимость от системы хранения данных. Добавлено через 2 минуты Важно и то другое. "Предметность" я не стал обсуждать, поскольку к вопросу поднятому Burlak1951 это не относится.
1
|
|||
|
управление сложностью
|
|
| 21.01.2021, 13:10 | |
|
Элд Хасп, а разве если это ООП, обязательно использовать доменную модель ? Можно же и анемичную использовать, кому что удобнее
, вот как раз походу Burlak1951 и использует анемичную.
0
|
|
|
Модератор
|
||
| 21.01.2021, 13:17 [ТС] | ||
|
Была когда-то, но, вроде, от её применения отказались. Применяют только её "верные адепты". Тот же VBA, по-моему, представитель анемичной модели. Но его развитие практически остановилось. Net в целом всё же нацелен на другую архитектуру приложений.
0
|
||
| 21.01.2021, 13:43 | |||||||||||||||||
|
//-- Загрузим новый UserControl //-- app.ucName содержит имя UserControl
0
|
|||||||||||||||||
|
управление сложностью
|
|
| 21.01.2021, 14:06 | |
|
Burlak1951, т.е. для добавление нового контрола, нужно было сделать 100500 правок ? Ну не знаю....даже как это обозвать, рефакторингом бы я точно не занимался. НО только не обижайтесь!
0
|
|
| 21.01.2021, 14:21 | ||
|
0
|
||
|
управление сложностью
|
||
| 21.01.2021, 14:33 | ||
|
0
|
||
| 21.01.2021, 14:38 | ||
|
а) Создать новый UC как часть решения. б) Сделать 5 правок в коде MainWindow приложения в) Если новый UC вызывается в других UC приложениях, то сделать соответствующие изменения в них
0
|
||
|
управление сложностью
|
||
| 21.01.2021, 14:42 | ||
, 5 - это слишком много, я не должен помнить все 5 мест, где это должно правиться. Т.е. временные затраты на поиск ошибки, и ее исправление возрастает в 5 раз. ИМХО
0
|
||
|
1341 / 920 / 265
Регистрация: 08.08.2014
Сообщений: 2,775
|
||
| 21.01.2021, 14:49 | ||
|
Например, визуальная часть ведь тоже содержит свою логическую часть (модель поведения, модель состояния), которая отвечает именно за состояние UI и его реакции на пользователя пользователя или какие-то прочие события. Например, пользователь навёл мышь на элемент и у элемента отрисовалась рамка - это логика визуальной части, которая реализована на XAML при помощи триггеров и стилей. Или пользователь нажал пимпочку и рядом выползло вспомогательное окно с расширенной статистикой, завязанное на ту же VM, это тоже логика UI, которая реализуется в UI-сборке при помощи Behavior или напрямую через XAML. С моделью, судя по соседней теме, да и в целом, тоже не всё одназначно. В общем случае под этим понимают всё, что лежит ниже VM. Но по факту, там может быть как логика предметной области в виде далёкого API, так и часть логики UI, если это локальная модель, которая нужна для отработки интерактива с пользователем, который на данные не влияет. И мне вот, например, было не очевидно, что так вообще можно делать в плане MVVM-архитектуры, когда часть UI-логики, пусть и косвенно, уползает даже ниже VM. И, зачастую, ты вроде готов разбираться, читаешь пост, но в ступоре, т.к. не понимаешь, что вообще человек имел ввиду, какую именно терминологию применял и как её понимает (речь не конкретных элементах/классах/синтаксисе XAML, речь именно про архитектурную терминологию).
0
|
||
| 21.01.2021, 14:49 | |
|
В каких случаях использовать обращение self::, а в каких $this. В чём разница между ними? В каких случаях уместно применять F-критерий, а в каких - эмпирическое корреляционное отношение?
В каких случаях нужно использовать подключаемый уровень, а в каких автономный В каких случаях надо создавать индексы к полям, а в каких - нет? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет!
За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|