在生成的Entity Framework类上实现INotifyPropertyChanged

Ste*_*eve 14 wpf xaml entity-framework

我有一个SQL DB,并实现了一个WPF UI来更新它.如果我使用EF5从DB生成类,我如何在生成的类和属性上实现INotifyPropertyChanged,以便我可以使用UI轻松地绑定它们?有没有一种简单的方法来实现这一目标?

谢谢

Wil*_*ean 13

如果遵循推荐的WPF MVVM模式,则可以将生成的类视为Model,然后编写实现INotifyPropertyChanged的ViewModel包装器.ViewModel类将访问您的数据库类并公开可以在XAML中绑定到UI的属性.

正如您的评论中所指出的,这可能导致编写样板代码的大量工作,但有一些方法可以解决这个问题.有些想法,请参阅此问题.

虽然最初需要做更多工作,但如果您需要进行任何中间格式化或处理,或者您需要在不影响UI的情况下更改数据库类,则MVVM模式从长远来看肯定会得到回报.

  • 通常,ViewModel不会从Model继承,而是有一个带有Model对象的字段,所以类似于`class AssetWrap:INotifyPropertyChanged {private Asset _asset; public int idNotify {get {return _asset.id; } set {_asset.id = value; NotifyPropertyChanged();}}`(这不是很完整).是的,有时你最终会得到很多带有MVVM模式的乏味样板,但如果你需要进行一些中间处理或改变模型的显示方式,它确实会得到回报.我提供了另一个问题的链接,该问题有一些减少这种工作量的想法. (2认同)

mar*_*k_h 8

有一个名为 PropertyChanged.Fody 的 NuGet 包,它使得将 INotifyPropertyChanged 添加到类属性非常简单。安装包后,只需将 [ImplementPropertyChanged] 属性添加到任何类或部分类,包将为您添加 INotifyPropertyChanged。

这是它使用的一个简单示例;

using PropertyChanged;

[ImplementPropertyChanged]
public partial class Order
{
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅GitHub

  • 更新:“ImplementPropertyChanged”已被“AddINotifyPropertyChangedInterface”取代 (4认同)

小智 5

我最近需要做同样的事情,但是使用Winforms.如果您不想按照bde的建议遵循MVVM模式,则可以修改t4模板以在生成的实体上实现INotifyPropertyChanged.

这个答案对我有帮助:https://stackoverflow.com/a/12192358/1914530