Сокращение шаблонного кода в приложении MVVM WPF для прикрепленных свойств, команд и т. д.?

Я работаю над приложением WPF MVVM. Я заметил, что мне приходится писать чрезмерное количество шаблонного кода только для объявления команд (через DelegateCommands из набора инструментов MVVM группы WPF), прикрепленных свойств и прикрепленных поведений. Существуют ли какие-либо стратегии для уменьшения объема шаблонного кода, который мне приходится писать?

Спасибо!


person djcouchycouch    schedule 11.08.2009    source источник
comment
Приведите пример того, что вы считаете шаблонным. Шаблон одного человека — бизнес-логика другого.   -  person Anderson Imes    schedule 11.08.2009
comment
Я использую фрагменты для их создания. Фрагменты создают #regions, поэтому мне не нужно смотреть на все это.   -  person 15ee8f99-57ff-4f92-890c-b56153    schedule 04.11.2016


Ответы (3)


Лично мне нравится библиотека MVVM Foundation Джоша Смита. Он использует там класс под названием RelayCommand, но он очень похож на ваш DelegateCommand из инструментария. Он позволяет создать команду и передать логику CanExecute и Execute через лямбда-выражения. Это поможет сократить объем шаблонного кода.

В его блоге, Джош также говорит об использовании универсального наблюдателя свойств, чтобы избежать некоторых сложных аспектов обработки событий PropertyChanged. Это тоже стоит изучить.

Честно говоря, большая часть так называемого «шаблонного» кода создает очень динамичную и гибкую основу для вашего приложения. Если вы создаете небольшое, легко поддерживаемое приложение, вы можете спросить себя: "Нужно ли мне применять здесь шаблон MVVM?" Если, с другой стороны, вы создаете более крупное приложение, которое будет иметь долгий срок службы и потребует много обслуживания, тогда этот шаблонный код спасет вас в будущем.

person Charlie    schedule 11.08.2009
comment
Ссылка на статью в блоге: joshsmithonwpf.wordpress.com/2009/07/11/ - person Lea Hayes; 18.07.2015

Я обнаружил, что пишу много кода для реализации уведомлений об изменениях через интерфейс INotifyPropertyChanged. Чтобы уменьшить это, я нашел пакет NuGet под названием PropertyChanged.Fody, который делает добавление INotifyPropertyChanged к свойствам классов очень простым.

Вот как это использовать;

using PropertyChanged;

[ImplementPropertyChanged]
public partial class Order
{
}

Теперь любое общедоступное свойство в классе будет иметь уведомление об изменении свойства. Это особенно полезно для классов EF, созданных сначала через БД, где у вас нет полного контроля над своими сущностями.

См. GitHub для получения дополнительной информации.

person mark_h    schedule 04.11.2016

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

Вы можете сделать их самостоятельно (или найти некоторые из них, которые вы можете импортировать непосредственно в свою Visual Studio).

Лично я использую набор инструментов mvvm light от Laurent Bugnion и его фрагменты кода/шаблоны файлов, они экономят мне много времени. Я бы предположил, что для большинства популярных наборов инструментов mvvm есть что-то подобное.

Надеюсь, поможет!

person matfillion    schedule 08.08.2011