实体集ChangeTracker发生变化时如何通知UI
How to notify UI when Entity set ChangeTracker has changes
我创建了一个 WPF
MVVM
应用程序,它对 Entity
集执行一些 CRUD
操作。
在 UI 中我有一个 save/commit button
,我希望它做的是在我的 ViewModel
中创建一个事件或 notification
View
当 Entity
设置 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));
我创建了一个 WPF
MVVM
应用程序,它对 Entity
集执行一些 CRUD
操作。
在 UI 中我有一个 save/commit button
,我希望它做的是在我的 ViewModel
中创建一个事件或 notification
View
当 Entity
设置 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));