WPF<->;实体绑定

本文关键字:实体 绑定 gt lt- WPF | 更新日期: 2023-09-27 18:25:38

我在将数据从数据源(通过实体fw的数据库)更新到wpf-windows时遇到问题。我使用实体框架生成文件,所以我以这种方式访问数据库中的数据:

public partial class sampleWindow : Window
    {
        myEntity en = new myEntity();
        public sampleWindow()
        {
            InitializeComponent();
            Bind();
        }
        private void Bind()
        {
            var list = from o in en.table select o;
            someDatagrid.ItemsSource = list.ToList();
        }

首先,这个方法对我的程序来说是足够的,我在数据库上做了一些操作后刷新了"绑定"方法,所以我的数据网格或组合中的数据是新鲜的。当我在不同的wpf窗口中更改数据库时,出现了这个问题。我已经读到,我应该实现可观察的接口,并使用load而不是itemsSource。我试着去做,但我很笨,我的尝试失败得很惨。有人能一步一步地告诉我,我该怎么做吗?

WPF<->;实体绑定

您需要一个Singleton来管理您的数据,并结合使用ObservableCollection来公开数据。当集合被任何视图更改时,它将通知观察的任何订阅者,他们将自动更新。

请参阅:XAML应用程序中的可绑定列表示例(第一部分)Singleton 的示例

您可能希望使用一个singleton作为实体的实例,如Sharp Ninja所述。他的文章在他发布的链接中做了很好的解释。您将希望使用可观察集合将ItemSource绑定到。当从可观察集合添加或删除项目时,UI会自动得到通知。您将面临的问题是没有.ToObservableCollection()扩展方法内置在.net中,因此您必须实现自己的方法。

我使用这种扩展方法

 public static ObservableCollection<T> ToObservableCollection<T>(
        this IEnumerable<T> enumeration)
    {
        return new ObservableCollection<T>(enumeration);
    }

因此,现在您的绑定方法可以将ItemSource设置为可观察集合

private void Bind()
    {
        var list = from o in en.table select o;
        someDatagrid.ItemsSource = list.ToObservableCollection();
    }

有很多比您的方法更好的方法(MVVM模式)来实现这一点。为了保持简单,可以通过以下方式完成:

 //Gets the Load() extention method available for DbSet
    using System.Data.Entity;
        private void Bind()
        {
            myEntity.table.Load();
            /*Local returns an obvervable collection convenient for data binding. 
            This is a synchronized local view of your data. It means any item added , deleted and updated will be reflected in your controls.*/
            var obsColl = myEntity.table.Local;
            someDatagrid.ItemsSource = obsColl;
        }