实体集ChangeTracker发生变化时如何通知UI

How to notify UI when Entity set ChangeTracker has changes

我创建了一个 WPF MVVM 应用程序,它对 Entity 集执行一些 CRUD 操作。

在 UI 中我有一个 save/commit button,我希望它做的是在我的 ViewModel 中创建一个事件或 notification ViewEntity 设置 ChangeTracker 有任何更改并将其绑定到 button 上的 IsEnabled

我怎样才能做到这一点?

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

dbcontext.ChangeTracker.HasChanges();

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

我只是不确定如何实施它

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

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

然后在XAML中绑定到它:

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

然后,每当数据库更新时,都会在 属性 上引发 属性 更改通知:

NotifyPropertyChanged("dbHasChanges");

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

您也可以将其重构为一个方法,这样您就不会多次对 属性 名称进行硬编码:

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

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

更新

与其使用单独的方法来防止对 属性 名称进行硬编码,不如在 .NET Core 中使用:

NotifyPropertyChanged(nameof(dbHasChanges));