实体框架查询完成事件

时间:2012-10-25 13:23:43

标签: c# wpf entity-framework

所以我的问题是:是否有查询完成事件???

我正在使用实体框架来查询数据库中的某些数据并将其显示在WPF应用程序中。我的问题是在实体框架从数据库服务器收到结果之前渲染完成,因此UI上的数据列表仍为空。相反,如果我进入调试模式并在继续列出数据之前稍等一下,查询就会完成并且数据会得到 列出。

我该如何解决这个问题?

修改 这是我的代码:

public class DatabaseModel : DbContext, INotifyPropertyChanged
    {
        public ObservableCollection<Employee> observableCollection;
        public event PropertyChangedEventHandler PropertyChanged;

        public DbSet<Employee> Employees { get; set; }
        public ObservableCollection<Employee> ObservableEmployees
        {
            get
            {
                return observableCollection;
            }
            set
            {
                observableCollection = value;
                OnPropertyChanged("ObservableEmployees");
            }
        }

        public DatabaseModel()
        {
            ObservableEmployees = Employees.Local;
        }

        // Create the OnPropertyChanged method to raise the event 
        protected void OnPropertyChanged(string name)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(name));
            }
        }
    }

我如何通过WPF使用My DataBinding: 在App.Xaml中我定义了这个类的实例......

<Application.Resources>
        <local_database:DatabaseModel x:Key="DatabaseInstance"/>
</Application.Resources>

使用Mainwindow.XAML中的数据

<ListBox ItemsSource="{Binding Source={StaticResource DatabaseInstance}, Path=ObservableEmployees, NotifyOnSourceUpdated=True}" 
                             DisplayMemberPath="Name"
                             Binding.SourceUpdated="ListBox_SourceUpdated">
                    </ListBox>

1 个答案:

答案 0 :(得分:1)

您的来源存在两个问题。

  1. 您使用Employees.Local,但我看不到任何加载员工的代码。
  2. DbContext派生的视图模型违背了视图模型的目的:关注点的分离。视图模型不应涉及数据层活动。您的控制器/演示者层应使用数据层创建。换句话说:创建一个DatabaseModel作为POCO类,并使用数据层中的Employees集合填充它。然后在UI开始渲染之前填充视图模型,并且您不需要任何复杂的连线来等待查询完成。