17

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

谢谢

4

5 回答 5

14

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

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

虽然一开始需要做更多的工作,但如果您需要进行任何中间格式化或处理,或者如果您需要在不影响 UI 的情况下更改数据库类,则 MVVM 模式绝对可以从长远来看得到回报。

于 2013-01-03T02:50:40.770 回答
8

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

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

using PropertyChanged;

[ImplementPropertyChanged]
public partial class Order
{
}

有关更多信息,请参阅GitHub

于 2016-11-04T16:12:23.347 回答
6

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

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

于 2013-01-03T03:10:31.790 回答
2

使所有 EF 生成的类都继承自实现INotifyPropertyChanged接口的类(使用您可能已经定义的非生成部分类)。PropertyChanged向此基类添加一个方法,该方法使用空字符串引发事件作为PropertyName. 然后,每次在 EF 生成的类实例上调用此方法时,其所有修改的属性都将在 WPF UI 中刷新。

于 2017-04-01T21:43:30.850 回答
1

您可以编辑 EF 模板(.tt 文件)以在您的属性上生成 propertyChanged 内容,或者(有点冒险:))来编辑生成的类。最后一个有点冒险,因为如果重新生成模型,所有更改都会丢失。所以也许包装类的变体或模板编辑(有点难:S)是最好的。

于 2014-09-03T15:29:44.973 回答