我创建了一个 WPF
MVVM
执行某些操作的应用程序CRUD
对 Entity
的操作放。
在 UI 中,我有一个保存/提交 button
,我想做的是创建一个事件或notification
在我的ViewModel
到View
当Entity
设置 ChangeTracker
有任何更改并将其绑定(bind)到 IsEnabled
在 button
.
我怎么能做到这一点?
我知道我可以利用以下属性:
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 中绑定(bind)到它:<Button IsEnabled="{Binding dbHasChanges}" />
然后,每当数据库更新时,就会在该属性上引发属性更改通知:NotifyPropertyChanged("dbHasChanges");
这适用于仅在您的应用程序中更改数据库的情况(每当用户进行更改时,您都将执行上述代码)。您还可以将其重构为一个方法,这样您就不会多次硬编码属性名称:
private void DBChangeOccured()
{
NotifyPropertyChanged("dbHasChanges");
}
然后你可以调用这个方法而不是 NotifyPropertyChanged
.更新
在 .NET Core 中,您可以使用以下方法,而不是使用单独的方法来防止对属性名称进行硬编码:
NotifyPropertyChanged(nameof(dbHasChanges));
关于c# - 当实体集 ChangeTracker 发生更改时如何通知 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48393303/