1

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

我正在使用实体框架从数据库中查询一些数据并将其显示在 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 使用我的 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>
4

1 回答 1

1

您的来源有两个问题。

  1. 您使用Employees.Local,但我看不到任何加载员工的代码。
  2. 从视图模型派生的视图模型DbContext破坏了视图模型的目的:关注点分离。视图模型不应参与数据层活动。您的控制器/演示者层应该使用数据层创建它。换句话说:创建一个作为 POCO 类并使用来自数据层的集合DatabaseModel填充它。Employees然后在 UI 开始渲染之前填充视图模型,您不需要任何复杂的接线来等待查询完成。
于 2012-10-25T14:16:56.453 回答