Где Вы разграничиваете между кодом и XAMLin WPF?

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

24
задан ASh 6 October 2018 в 09:24
поделиться

8 ответов

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

, Например, это помогает Вам сохранить ясную границу между разработчиком и разработчиком и даже допускает разработку через тестирование.

существует целый набор информации там о нем, но я запустил бы с сообщений в блоге John Gossman:

Обновление: Просто хочу указать на людей на другое сообщение StackOverflow с большим количеством хорошей информации о M-V-VM в нем.

19
ответ дан Community 28 November 2019 в 22:49
поделиться

Одна подсказка не должна объявлять обработчики событий в XAML. Вместо этого назовите свои элементы и присоедините обработчики событий в коде - позади. Это помогает сохранить чистое разделение между разработчиком и разработчиком.

14
ответ дан Kent Boogaart 28 November 2019 в 22:49
поделиться

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

я сделал что-то вроде сообщения в блоге на этом только что здесь .

6
ответ дан Kent Boogaart 28 November 2019 в 22:49
поделиться

Когда Вы будете следовать за надлежащим шаблоном как Mode-View-ViewModel, Вы получите возможность сделать больше на стороне XAML и меньше на коде позади. Максимизируйте использование RoutedEvents и Команды в коде WPF.

3
ответ дан Jobi Joy 28 November 2019 в 22:49
поделиться

При создании UserControls я пробую к Xamlize как можно больше.

Одна подсказка, которую я нашел в поле, - то, что создание ControlTemplate и DataTemplates вручную является действительно болью в ***... Я всегда пишу тем в XAML....

2
ответ дан akjoshi 28 November 2019 в 22:49
поделиться

As others have suggested, try following the Model-View-ViewModel pattern. However, it's OK to put stuff in the codebehind! The rule is that if it's "View" related, you put it in the Xaml or the codebehind (whichever is more convenient for you). If it's more business logic related to how the user interacts with the system, then it belongs in the ViewModel. If it's just business logic not concerned with interaction, it belongs in the Model.

Examples of each would be:

  • Model: defines a property called ModifiedDate that stores the last time it was modified.

  • ViewModel: converts the ModifiedDate into an enumeration property called ModifiedAge, based on when it was modified: Yesterday, In the Last Week, In the Last Month, In the Last Year, etc.

  • View: converts the ModifiedAge property to a background color where more recently accessed data is highlighted bright yellow, and less recently accessed data is more of a beige-khaki-gray that your designer insists is called "Meadow Lark Lilly Flowerpot".

10
ответ дан 28 November 2019 в 22:49
поделиться

Я бы сказал, используйте как можно больше xaml, используя Binding, commands, styles, templates и т.д. Мне нужно было поддержать функциональность сохранения и загрузки шаблонов с помощью XAMLReader/XAMLWriter, и это проще для элементов управления, имеющих больше xaml.

1
ответ дан 28 November 2019 в 22:49
поделиться

Не упускайте из виду тот факт, что XAML - это код . Он декларативный и все такое, но все же язык программирования. Фактически, он проходит преобразование в C # или Visual Basic, прежде чем превращается в IL для компилятора .NET.

Я повторю комментарий Скотта Уитлока: MVVM - отличный способ разделить проблемы и сосредоточиться на архитектурных деталях. Это действительно нормально - вставлять что-то в свой код программной части, особенно то, что он описывает. Если у вас нет требования отделять дизайнера от разработчика, адаптируйте шаблон MVVM к вашим конкретным потребностям; не пытайтесь заставить себя быть чистым или идеалистичным в этом отношении.

Также совершенно нормально помещать вызовы методов вашей модели ViewModel прямо в код View позади, если вам не нужна гибкость команд с помощью классов ICommand. Или, если вы знаете, что View, который вы создаете, всегда будет привязан к классу ViewModel, который вы создаете. Или вы могли бы пойти дальше, определить интерфейс для вашей ViewModel и привязаться только к реализациям этого интерфейса. Тогда вы все равно можете поменять ViewModel, когда захотите.

Такие вещи.

4
ответ дан 28 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: