c# - 当实体集 ChangeTracker 发生更改时如何通知 UI

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

我创建了一个 WPF MVVM执行某些操作的应用程序CRUDEntity 的操作放。

在 UI 中,我有一个保存/提交 button ,我想做的是创建一个事件或notification在我的ViewModelViewEntity设置 ChangeTracker有任何更改并将其绑定(bind)到 IsEnabledbutton .

我怎么能做到这一点?

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

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/

相关文章:

entity-framework - EntityFramework 的对象缓存。获取已经检索到的对象

c# - 将泛型类型定义字符串从 C# 样式转换为 CLR 样式

c# - IMutableEntityType.GetProperties() 不包含我想要的属性

c# - WPF 绑定(bind)找不到引用的绑定(bind)源

c# - .Net 5 - WPF,单元测试问题

oracle - Oracle 的 Entity Framework 兼容提供程序的比较?

c# - 以独立于区域设置的方式读取 Excel 文件

c# - IEnumerable.ToArray<T>() 与 IEnumerable.Cast<T>().ToArray()

c# - 如何通过键盘禁用 ListView 导航

c# - 如何使用动态 OR 语句构建 Linq 查询?