C# 使用Catel和Entity框架跟踪wpf应用程序中的数据库更改

C# 使用Catel和Entity框架跟踪wpf应用程序中的数据库更改,c#,wpf,entity-framework,data-binding,catel,C#,Wpf,Entity Framework,Data Binding,Catel,我有一个程序,它使用MS SQL数据库。我决定切换到MVVMWPF模式,并对数据库内容使用实体框架,对MVVM内容使用Catel 我在代码中创建了数据库第一模型和长期上下文(Global.database)。我将模型的*.tt文件中的ICollection和HashSet类型更改为ObservableCollection 现在我有了WPF视图和视图模型。起初,我决定在视图中显示一些基本的数据库连接信息 因此,我创建了一个模型: public class DbInfo :ModelBase {

我有一个程序,它使用MS SQL数据库。我决定切换到MVVMWPF模式,并对数据库内容使用实体框架,对MVVM内容使用Catel

我在代码中创建了数据库第一模型和长期上下文(
Global.database
)。我将模型的*.tt文件中的ICollection和HashSet类型更改为ObservableCollection

现在我有了WPF视图和视图模型。起初,我决定在视图中显示一些基本的数据库连接信息

因此,我创建了一个模型:

 public class DbInfo :ModelBase
{
    public DbInfo()
    {

        ServerName = Global.Database.Database.Connection.DataSource;
        DbName = Global.Database.Database.Connection.Database;
        RegisteredClientsCount = Global.Database.Clients.Count() - 1;
    }
    public string ServerName
    {
        get { return GetValue<string>(ServerNameProperty); }
        set { SetValue(ServerNameProperty, value); }
    }


    public static readonly PropertyData ServerNameProperty = RegisterProperty("ServerName", typeof(string), string.Empty);

    public string DbName
    {
        get { return GetValue<string>(DbNameProperty); }
        set { SetValue(DbNameProperty, value); }
    }

    public static readonly PropertyData DbNameProperty = RegisterProperty("DbName", typeof(string), string.Empty);

    public int RegisteredClientsCount
    {
        get { return GetValue<int>(RegisteredClientsCountProperty); }
        set { SetValue(RegisteredClientsCountProperty, value); }
    }

    public static readonly PropertyData RegisteredClientsCountProperty = RegisterProperty("RegisteredClientsCount", typeof(int), 0);

}
我只想知道,我现在怎么能跟踪数据库中的变化? 当我运行我的应用程序时,这个标签显示正确的值——“客户端”表行的数量。然后,我将一些行手动添加到数据库中——在我的窗口中什么也没有发生


也许我对所有这些东西有一些误解,但我希望我的数据库数据绑定到wpf控件,包装到所有这些属性更改的接口中,并且随着数据库更改而更新。我错了吗?我该怎么办?非常感谢您的帮助。

这个问题太复杂了。您只显示模型和视图模型,但在这段代码中根本没有“跟踪数据库”。我建议您首先尝试分别启动和运行这些部分(我知道您已经有了MVVM),因此使用EF搜索DB跟踪。好的,这几乎是我所有的代码实际上=)我在App.xaml.cs中所做的唯一一件事就是创建我的Global.Database(=new dbContext())的实例。我的问题是我无法理解,我是否需要更多的东西来让思考发挥作用?我尝试使用MVVM模式,所以我不能使用任何“计时器”或其他事件处理程序,因为我必须手动更新我的上下文。我假设,如果我有所有这些“preperty changes notifiers”和“observable collections”,我就不需要其他任何东西了。正如我所看到的,我在常规winforms应用程序中出错了。我所需要做的就是处理我的上下文,然后在某个单独的线程或某个事件中再次创建它,但在这里,我只是不明白将我的“刷新”代码放在哪里。对我来说,一切似乎都是“自动刷新”的。这个问题太复杂了。您只显示模型和视图模型,但在这段代码中根本没有“跟踪数据库”。我建议您首先尝试分别启动和运行这些部分(我知道您已经有了MVVM),因此使用EF搜索DB跟踪。好的,这几乎是我所有的代码实际上=)我在App.xaml.cs中所做的唯一一件事就是创建我的Global.Database(=new dbContext())的实例。我的问题是我无法理解,我是否需要更多的东西来让思考发挥作用?我尝试使用MVVM模式,所以我不能使用任何“计时器”或其他事件处理程序,因为我必须手动更新我的上下文。我假设,如果我有所有这些“preperty changes notifiers”和“observable collections”,我就不需要其他任何东西了。正如我所看到的,我在常规winforms应用程序中出错了。我所需要做的就是处理我的上下文,然后在某个单独的线程或某个事件中再次创建它,但在这里,我只是不明白将我的“刷新”代码放在哪里。对我来说,一切似乎都是“自动刷新”
public class MainWindowViewModel : ViewModelBase
{
    public MainWindowViewModel()
    {
        DatabaseInfo = new DbInfo();

    }

    public DbInfo DatabaseInfo
    {
        get { return GetValue<DbInfo>(DatabaseInfoProperty); }
        set { SetValue(DatabaseInfoProperty, value); }
    }

    public static readonly PropertyData DatabaseInfoProperty = RegisterProperty("DatabaseInfo", typeof(DbInfo), null);
  }
Context="{Binding DatabaseInfo.RegisteredClientsCount}"