级联组合框的热切加载
本文关键字:加载 组合 级联 | 更新日期: 2023-09-27 17:53:08
我有一个实体框架应用程序,其中客户和项目之间存在一对多关系。在级联组合框中访问数据。我最初使用的是懒惰加载,一切都正常。由于我现在必须序列化我的数据,我需要以另一种方式加载我的数据。我想使用热切加载,但我不确定如何在我的情况下实现它。在Projects属性中,我试图使用以下内容访问:
var a = context.Customers.Include("Project");
projects = (ObservableCollection<Project>)a;
但是我得到了一个转换类型错误。有人对我访问产品数据有什么建议吗?谢谢
public class ViewModel:INotifyPropertyChanged
{
RevisionModelContainer context = new RevisionModelContainer();
public ViewModel()
{
Customers = new ObservableCollection<Customer>();
}
private ObservableCollection<Customer> customers;
public ObservableCollection<Customer> Customers
{
get
{
return customers;
}
set
{
customers = value;
OnPropertyChanged("Customers");
}
}
private ObservableCollection<Project> projects;
public ObservableCollection<Project> Projects
{
get
{
var a = context.Customers.Include("Project");
projects = (ObservableCollection<Project>)a;
return projects;
}
set
{
projects = value;
OnPropertyChanged("Projects");
}
}
private Customer selectedCustomer;
public Customer SelectedCustomer
{
get { return selectedCustomer; }
set
{
try
{
selectedCustomer = value;
OnPropertyChanged("SelectedCustomer");
this.Projects = selectedCustomer.Projects;
OnPropertyChanged("Projects");
}
catch (Exception ex)
{
Debug.WriteLine("Seleceted Customer: " + ex.Message);
}
}
}
private Project selectedProject;
public Project SelectedProject
{
get { return selectedProject; }
set
{
try
{
selectedProject = value;
OnPropertyChanged("SelectedProject");
this.Programs = selectedProject.Programs;
OnPropertyChanged("Programs");
}
catch (Exception ex)
{
Debug.WriteLine("Selected Project: " + ex.Message);
}
}
}
您的"Projects"answers"Customers"属性的类型应分别为IEnumerable<Project>
和IEnumerable<Customer>
。您不需要向ObservableCollection投射任何内容。您需要使用ObservableCollections的唯一时间是视图需要对集合更改的内容做出反应。在您的情况下,视图只需要知道Projects属性值已更改为不同的项目列表。
我的意思是:
public class ViewModel : INotifyPropertyChanged
{
RevisionModelContainer context = new RevisionModelContainer();
public ViewModel()
{
Customers = context.Customers.Include("Project");
}
public IEnumerable<Customer> Customers { get; private set; }
public IEnumerable<Project> Projects { get; private set; }
private Customer selectedCustomer;
public Customer SelectedCustomer
{
get
{
return selectedCustomer;
}
set
{
selectedCustomer = value;
OnPropertyChanged("SelectedCustomer");
// reset the projects.
this.SelectedProject = null;
this.Projects = selectedCustomer.Projects;
OnPropertyChanged("Projects");
}
}
private Project selectedProject;
public Project SelectedProject
{
get
{
return selectedProject;
}
set
{
selectedProject = value;
OnPropertyChanged("SelectedProject");
}
}
}
根据我对你的用例的了解,这应该是可行的。如果您在视图模型中动态地添加或从客户、项目或程序集合中删除项,则只需要可观察的集合,如下所示:Projects.Add(new Project());
。
如果你所做的只是分配像Projects = SelectedCustomer.Projects
这样的属性,那么就不需要使用可观察的集合,只需要为你更新的属性引发propertychanged事件。