如何在实体设置ChangeTracker发生更改时通知UI

时间:2018-01-23 02:31:21

标签: c# wpf entity-framework mvvm change-tracking

我已经创建了一个WPF MVVM个应用,可以对CRUD集进行一些Entity操作。

在用户界面中,我有一个保存/提交button,我希望它能在notification中为ViewModel创建一个事件或ViewEntity设置ChangeTracker有任何更改并将其绑定到IsEnabled上的button时。

我怎么能实现这个目标?

我知道我可以使用以下属性:

dbcontext.ChangeTracker.HasChanges();

db.ChangeTracker.Entries().Any(e => e.State == EntityState.Added
                                 || e.State == EntityState.Modified
                                 || e.State == EntityState.Deleted);

我只是不确定如何实施

1 个答案:

答案 0 :(得分:2)

我将在ViewModel上实现以下属性:

public bool dbHasChanges => dbcontext.ChangeTracker.HasChanges();

然后在XAML中绑定它:

<Button IsEnabled="{Binding dbHasChanges}" />

然后,只要数据库更新,就会在该属性上引发属性更改通知:

NotifyPropertyChanged("dbHasChanges");

这适用于仅在应用程序中更改数据库的情况(无论何时用户进行更改,您都会执行上述代码)。

您还可以将此重构为方法,这样您就不会多次硬编码属性名称:

private void DBChangeOccured()
{
    NotifyPropertyChanged("dbHasChanges");
}

然后您可以调用此方法而不是NotifyPropertyChanged