Внедрить INotifyPropertyChanged в сгенерированные классы Entity Framework - программирование

Внедрить INotifyPropertyChanged в сгенерированные классы Entity Framework

У меня есть SQL DB и я использую интерфейс WPF для его обновления. Если я использую EF5 для создания классов из БД, как я могу реализовать INotifyPropertyChanged для сгенерированных классов и свойств, чтобы я мог легко привязать их к пользовательскому интерфейсу? Есть ли простой способ достичь этого?

Спасибо

4b9b3361

Ответ 1

Если вы следуете рекомендованному шаблону MVVM для WPF, вы можете обрабатывать созданные вами классы как Model, а затем писать обертки ViewModel, которые реализуют INotifyPropertyChanged. Классы ViewModel будут обращаться к вашим классам DB и выставлять свойства, которые вы можете привязать к вашему пользовательскому интерфейсу в XAML.

Как отмечается в вашем комментарии, это может привести к большому количеству написания шаблона работы, но есть некоторые способы справиться с этим. См. этот вопрос для некоторых идей.

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

Ответ 2

Мне нужно было сделать то же самое недавно, но с Winforms. Если вы не хотите следовать шаблону MVVM, как предложено bde, вы можете изменить шаблон t4 для реализации INotifyPropertyChanged на ваших сгенерированных объектах.

Этот ответ помог мне: fooobar.com/questions/375962/...

Ответ 3

Вы можете отредактировать шаблон EF (файл .tt), чтобы сгенерировать свойство propertyChanged в ваших свойствах (или немного рискованно:)) для редактирования созданных классов. Последнее немного рискованно, потому что, если вы обновите модель, все изменения будут потеряны. Так что, возможно, вариант с классами обертки или редактирования шаблона (бит hard: S) является лучшим.

Ответ 4

Там есть пакет NuGet с именем PropertyChanged.Fody, который делает добавление свойств INotifyPropertyChanged к классам очень простым. После того, как вы установили пакет, просто добавьте атрибут [ImplementPropertyChanged] для любого класса или частичного класса, и пакет добавит для вас INotifyPropertyChanged.

Вот простой пример использования:

using PropertyChanged;

[ImplementPropertyChanged]
public partial class Order
{
}

Подробнее см. GitHub.

Ответ 5

Сделайте все ваши классы, созданные EF, наследуемыми от класса, который реализует интерфейс INotifyPropertyChanged (используя негенерированные частичные классы, которые вы, вероятно, уже определили). Добавьте метод к этому базовому классу, который вызывает событие PropertyChanged с пустой строкой как PropertyName. Затем каждый раз, когда вы вызываете этот метод на экземпляр класса EF, все его измененные свойства будут обновлены в вашем пользовательском интерфейсе WPF.