Подтвердить что ты не робот

XAML или код С#

Я не люблю использовать XAML. Я предпочитаю кодировать все в С#, но я думаю, что я делаю что-то неправильно.

В каких случаях лучше использовать XAML и когда вы используете С#? Каков ваш опыт?

4b9b3361

Ответ 1

Создание всего окна на С# может быть бесполезным для кода. Самое лучшее в WPF заключается в том, что XAML позволяет отделить ваш дизайн от вашей логики, делая гораздо более удобный для чтения код.

Я буду использовать С#, когда мне нужно создать динамические элементы управления, но я, как правило, сохраняю свой общий дизайн, статические раскадровки, стили, datatemplates и т.д. в XAML.

Ответ 2

Отметьте это видео на MVVM в WPF. Если вы хотите обернуть голову тем, как организовать приложение WPF по сравнению с тем, что происходит в XAML, позади кода и другими абстракциями, это отличное место для начала.

Ответ 3

Вы можете зайти слишком далеко с XAML. Те, кто хочет, чтобы весь его пользовательский интерфейс (включая логику, отношения обработки событий и т.д.), Определенные в XAML, вероятно, не хватало точки.

Цель XAML - предоставить общий формат для определения того, как должны выглядеть вещи. Это должно быть просто описание того, как проложить вещи, как их цвет и стиль визуально.

Существует очень мало смысла пытаться использовать его в качестве замены для других аспектов С#, поскольку С# имеет постоянный старт с точки зрения функций программирования - повторное использование (определение типов и функций), ссылаясь на переменные, процедурные программирования и даже декларативных или функциональных стилей.

Лично мне очень нравится сбрасывать пользовательский интерфейс с выражением Linq!

Конечная абсурдность была достигнута с помощью образца, который я видел, когда они использовали действия рабочего процесса в качестве дочерних элементов кнопки для доставки обработчика Click, поэтому вся программа была в XAML. Это звучит "круто", но проблема в том, что он был значительно более уродливым и нечитаемым, чем эквивалентная С# или VB.NET-программа, и поэтому все, что готово для использования на С#, должно быть заменено более подробным, flaky эквивалентом. Ничто не было на самом деле получено этим переводом в более уродливый синтаксис - это одна и та же программа только более отвратительная. XML является плохой основой для синтаксиса общего языка программирования. Начните с того, что символ большего размера должен быть записан как >!

В параллельном юниверсе Microsoft выпустила С# 3.0 до того, как закончит XAML. Команда XAML приняла синтаксис инициализатора объекта/списка С# 3.0 вместо XML в качестве своего синтаксиса. И все эти дебаты никогда не происходили.

Ответ 4

Мой опыт в том, что некоторые вещи гораздо быстрее выполняются на С#, в то время как большинство из них быстрее выполняются в XAML. Когда для выполнения одной строки кода XAML требуется 5 строк кода С#, мне очень легко выбрать, что лучше.

Ответ 5

В принципе, XAML предназначен для выражения визуального дизайна, С# предназначен для выражения логики.

Любая визуальная конструкция должна быть выполнена в XAML, любая логика должна быть реализована на С#.

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

- Это также означает, что вы могли бы заменить либо логику, либо визуальный дизайн без "взлома".

- Соединение между ними должно выполняться с привязками данных и с привязками команд.

Практика, которую я использую:

1. Определите модель (модель объекта бизнес-данных) в отдельном коде С#.

2. Определите постоянные части представления (постоянные части графического пользователя интерфейс, например. окна, меню,...) в XAML (желательно использовать Blend, а не VS для этого).
* Не определяйте стиль (цвета, шрифты,...) здесь.
* Не записывайте обработчики событий для кнопок (в большинстве случаев) в code-behind-the-XAML, вместо этого используйте командные привязки.

3. Определите, как модель представлена ​​в представлении (графический интерфейс для просмотра/редактирования объектов данных) с использованием XAML "ResourceDictionary", расположенных в отдельных файлах.

- Записывать с помощью blend, а затем добавлять привязки к XAML с помощью VS (добавление Resharper для Jetbrains для VS поможет с выражением привязки).

- Если типы объектов не известны во время разработки, вы можете использовать "свободно-XAML" и поместить XAML в папку, в которую могут быть добавлены файлы/отредактированы внутри без перекомпиляции.

4. Создайте соединение между моделью и представлением (контроллер/модель представления) в С#, которые:
* Создает представления по мере необходимости (для объектов динамики)
* Data-привязывает представление к модели (устанавливает представление DataSource как соответствующий объект в модели)
* Выполняет команды
* Command-привязывает представление к реализациям команд внутри себя

5. В Application.xaml удалите StartupUri = "MainWindow.xaml" и добавьте Startup = "ApplicaitonStartUp".
В обработчике событий ApplicationStartUp():
* Загрузите любые свободные XAML, которые у вас есть
* Создайте контроллер
* Создать главное окно
* Создать модель
* Подключите контроллер к модели и главному окну
* Показать основное окно
* (Сохраните модель, контроллер и главное окно в приватные поля здесь, чтобы убедиться, что все они сохранены)

6. Добавьте стиль (цвета, шрифты) в отдельный файл XAML в ResourceDictionary (используя смесь для этого или купите готовый файл темы/файла XAML).

Ответ 6

Желание написать свои пользовательские интерфейсы на С# вместо XAML - это просто проявление того, насколько вы комфортно находитесь в XAML.

Для меня личная цель - писать как можно меньше кода. Проще говоря, код позади трудно тестировать, но может (и обычно делает) включать в себя логику, которая не проходит тестирование. XAML является декларативным (например, HTML) и не содержит никакой логики, поэтому нет ничего, чтобы тестировать unit-test. Я сохраняю код своего вида в XAML, и я сохраняю свою логику представления в своей ViewModel (MVVM), которая ОЧЕНЬ легко тестируется.

Как только вы становитесь более комфортно с XAML, тем больше вы поймете его преимущества над конструкцией представления в процедурном коде... Используя шаблон, подобный MVVM, вы сделаете еще один шаг и поймете, что код-код полезен только в редкие случаи.

Ответ 7

Самое главное иметь в виду, что XAML предназначен для презентации. Вся ваша презентация должна быть в XAML. Если у вас есть логика, вы сохраняете это из своего XAML - на своем С#.

Представьте, что вы заменили свой файл XAML тем, что LOOKS полностью отличается, но все еще использует те же данные, что и в случае разделения.

Ответ 8

Одна из приятных вещей о XAML - это разделение представления логики. Это разделение не только теоретическое, но и практическое. В моем случае большинство моих пользовательских интерфейсов теперь обрабатываются дизайнером. Этот дизайнер использует смесь и не знает С#, не интересуется изучением С#, и, откровенно говоря, этого не нужно. Этот дизайнер - настоящий дизайнер, художник, который знает, как использовать эти инструменты, чтобы все выглядело действительно очень красиво. В основном моя филосипия такова, что чем больше я использую XAML, тем меньше работы, которую я должен выполнять в пользовательском интерфейсе, потому что он может это сделать. Это хорошо сработало для нас. Я обычно создаю свой контроль, чтобы быть беззаботным, дать им простой вид без излишеств, использовать DataContext для привязки моего объекта (btw DataTriggers - отличный способ сократить код). В результате я часто буду проверять свой код, вернуться на следующий день, синхронизировать его, и пользовательский интерфейс будет выглядеть совершенно по-другому, но все еще работает!!!

Конечно, для этого потребовалось не менее 1/2 года, но теперь эта модель, похоже, работает, и наш пользовательский интерфейс выглядит Kick A ##, наше приложение заслуживает высокой оценки, и я мало работаю над пользовательским интерфейсом и получаю для работы над более прохладными вещами. Короче говоря, я думаю, что код позади может быть немного более ориентированным на разработчиков и забывает о другой группе, которая может извлечь выгоду, превзойти и зарабатывать на жизнь с помощью WPF, а именно дизайнеров.

Конечно, еще есть моменты, когда требуется, чтобы XAML/WPF поет и танцует, и когда-то нам нужно обучать дизайнеров правильному способу делать что-то, но я думаю, что его ценность для инвестиций окупает многих раз в крупных проектах (может быть, не так коротким one0

Ответ 9

XAML, MXML все эти вещи работают до тех пор, пока вы разрабатываете простой интерфейс с некоторой средней сложностью. Как только ваш пользовательский интерфейс станет сложным и богатым, автоматические привязки данных вызовут больше проблем, чем их преимущества. Цель XAML не упрощает программирование, это отделить пользовательский интерфейс от логики, чтобы инструмент UI был легким..

Нет привязок данных, никаких обработчиков событий.. предположим, что вы больше никогда не увидите свой XAML и напишите код.

XAML - это презентация. Связывание данных не является представлением. его логика представления. поместить всю логику представления в код позади (привязка данных и обработчики). Разработчики имеют собственный код, дизайнеры владеют XAML. если вы разработчик, и если вы касаетесь XAML, тогда переместите эту часть в код.

мы можем писать приложения WPF без XAML тоже.

Спасибо Vinoth Kumar R (Достаточно достаточно, используя привязку данных Flex MXML)

Ответ 10

Это не только о вас, но и о вашей команде, некоторые из которых могут быть дизайнерами.

Ответ 11

XAML и С# - действительно хороший способ отделить логику от дизайна, как уже описано.

Для типичного программиста способ программирования действительно изменяется с помощью WPF, предполагая, что программист исходит из фона С++, VB, WinForms, ATL и MFC, фон из которых был не таким естественным, как логический интерфейс от логики как с XAML и С#.

Чтобы привыкнуть к этому способу программирования, требуется некоторое время, но все больше и больше опыта становится действительно эффективным.

Перед началом работы очень полезно изучить шаблон MVVM и запустить обучающие программы, чтобы понять силу шаблона, а также понять его преимущества.

Приложения WPF и С#, основанные на преимуществах шаблонов MVVM:

1. Пользовательский эксперимент и удобство использования Отделяя логику от пользовательского интерфейса, становится более естественным создание специализированного дизайнера, работающего над дизайном и анимацией пользовательского интерфейса. Таким образом, программист может сосредоточиться на логике и техническом решении, в то время как пользовательский интерфейс разработан кем-то, кто знает дизайн. Это было проблемой для многих компаний-разработчиков программного обеспечения, по крайней мере в отрасли, которые в действительности являются программистами, которые также разрабатывают интерфейс, и это привело к большой поддержке, поддержке и эффективному применению.

Существует более высокая вероятность того, что он окажется в более удобных для пользователя приложениях, если у вас есть персонаж с фоном использования юзабилити, ориентированным на использование, а не на техническое решение. Существует действительно интересная книга об этих примерах, "Дизайн пользовательского интерфейса для программистов" Джоэла Спольского.

С помощью шаблона MVVM для приложения XAML есть хорошая вероятность, что мы увидим больше приложений для пользователя.

2. Maintanence Техническое обслуживание, которое дорого стоит в разработке программного обеспечения. Он может почувствовать, что шаблон MVVM является большим накладным капиталом в начале, но в то время как функции добавлены, и более сложное и расширенное приложение становится более полезным. Вы увидите, что это действительно легко поддерживать такое приложение. Для обзора вы можете посмотреть это видео:

3. Смешивание компетенций Выделенный дизайнер и специальный программист, работающий в команде для достижения лучшего результата, - это очень хороший способ смешивания компетенций. Вместо того, чтобы нанимать программистов, организациям необходимо сочетать компетенции, чтобы обеспечить наилучшие результаты.

4. Возможность для дизайна заинтересованных программистов Наконец, в среде Windows можно внедрять причудливые приложения. Если вы программист, который интересуется дизайном, Microsoft Expression Blend действительно открывает возможности для изучения и достижения привлекательных и полезных приложений с приятным дизайном.

Можно использовать риск с использованием XAML и С#, MVVM или нет, большие возможности и гибкость, которые он предоставляет, также могут быть недостатком. Предоставляя программисту свободу в этой новой легкой пользовательской среде, приложения могут иметь широкий спектр анимаций, цветов, все, что обеспечивает эта новая среда. Вспомним, как вы добавили элементы управления пользовательским интерфейсом в С++ и ATL envrionment.

Тем не менее, преимущества больше, и я надеюсь, что вы получите вдохновение, чтобы использовать XAML вместо С# для пользовательского интерфейса, когда привыкаете к нему. Я убежден, вам понравится.

Ссылка на хороший тутурный: Учебник MVVM XAML С#

Ответ 12

Я изначально пришла с веб-разработки и изучала WPF/Silverlight на данный момент. Для меня модель XAML имеет для меня гораздо больше смысла, чем WinForms. Я рассматриваю XAML так, как если бы он был HTML и .cs файлами, как код.

Ответ 13

Мне нравится чистый код, чем меньше у меня кода, тем он чище. Код может быть написан миллионами способов, XAML более ограничительный. XAML умеет сокращать код, когда это необходимо, конечно. Если я смогу положить что-то в XAML, я сделаю это. Инструменты могут читать XAML и делать с ним вещи. Гораздо меньше с кодом. Инструменты и инфраструктура обработки XAML будет развиваться и улучшаться, делая больше и лучше работать с существующим XAML. Не могу сказать, что о коде. Чем больше XAML эволюционирует, тем больше мы сможем декларативно определить наши приложения.

Для меня использование XAML похоже на использование LINQ. Если я могу написать однострочное выражение, которое легко читать, и пусть структура решит лучший способ реализовать то, что я хочу, я чувствую себя хорошо. Я определенно стараюсь, насколько могу, использовать объявления о том, что я хочу вместо hardcoding, как я хочу, чтобы это было сделано. F # - еще один хороший пример этой парадигмы.

Ответ 14

Вся логика должна быть в коде, независимо от того, какой язык программирования вы используете в компьютерном программировании. XAML никогда не должен заменять это даже в ControlTemplate, хотя это хорошо, но намного легче unit test и отлаживать код.

Ответ 15

Кажется, что ни один из ответов не упоминал важный момент: https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh465340.aspx

XAML - это просто процедурный код (только проще)

<Grid x:Name="ContentPanel" Margin="12,0,12,0">
    <Button Height="72" Width="160" Content="Click Me" />
</Grid>

"Ниже показано, как этот XAML может быть частично заменен кодом, написанным на С# или Visual Basic."

// Initialize the button
Button myButton = new Button();
// Set its properties
myButton.Width = 160;
myButton.Height = 72;
myButton.Content = "Click Me";
// Attach it to the visual tree, specifically as a child of
// a Grid object (named 'ContentPanel') that already exists. In other words, position
// the button in the UI.
ContentPanel.Children.Add(myButton);

Если вы работаете с формами Windows, например, вы, вероятно, помните, что конструктор окон формирует файл .designer.cs, содержащий код, похожий на пример из приведенной выше ссылки. Такой декларативный код намного лучше представлен в XAML, чем С#.

Для любого приложения, отличного от игрушек, вы ВСЕГДА предпочитаете XAML определять интерфейс и подключать его к логике с помощью MVVM.

Ответ 16

Некоторые вещи легче поддерживать или отлаживать код.

Ответ 17

Не следует упомянуть, что вы сможете делать больше в Xaml2009, который теперь должен быть сделан в коде.

Неудивительно, что BAML не будет полностью поддерживать xaml 2009 в 2010 году, поэтому вы не сможете скомпилировать xaml в 2010 году. И придется ждать более поздней версии blend, чтобы выполнить полный цикл разработки dev. (позже 3)

Дуглас

Ответ 18

XAML можно рассматривать как похожее на комбинацию XHTML и CSS или XML и XSL, которые используются для структуры и дизайна. Любая форма логики должна быть в С#. Таким образом, структура и дизайн отделены от логики. Ваш код должен быть более чистым, используя этот подход. Еще одна положительная вещь заключается в том, что задачи могут быть проще разделять между дизайнерами и программистами.

Еще одна вещь... это определение XAML из MSDN:

Расширяемый язык разметки приложений (XAML) - это язык разметки для декларативного программирования приложений. Windows Presentation Foundation (WPF) реализует загрузчик расширяемого языка разметки приложений (XAML) и предоставляет языковую поддержку расширяемого языка разметки приложений (XAML) для типов Windows Presentation Foundation (WPF), так что вы можете создать большую часть своего пользовательского интерфейса приложения в расширяемой разметке приложений Язык (XAML). Кроме того, SDK включает в себя инструмент редактирования расширяемого языка разметки приложений (XAML) под названием XAMLPad. Вы можете использовать этот инструмент для экспериментов с Extensible Application Markup Language (XAML) в режиме реального времени.

Ссылка на цитату.

Ответ 19

Программирование WPF в С# с использованием свободного стиля помогает уменьшить размер и сложность кода. См. этот ответ для примера использования свободного стиля с WPF.