所以我的问题是:是否有查询完成事件???
我正在使用实体框架来查询数据库中的某些数据并将其显示在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>
答案 0 :(得分:1)
您的来源存在两个问题。
Employees.Local
,但我看不到任何加载员工的代码。DbContext
派生的视图模型违背了视图模型的目的:关注点的分离。视图模型不应涉及数据层活动。您的控制器/演示者层应使用数据层创建。换句话说:创建一个DatabaseModel
作为POCO类,并使用数据层中的Employees
集合填充它。然后在UI开始渲染之前填充视图模型,并且您不需要任何复杂的连线来等待查询完成。