C# XAML如何实例化对象?
我正在使用MVVM模式和实体框架开发一个WPF应用程序。我编写了一个类,其中包含一组从数据库填充的列表。这些列表用于填充组合框和其他`项控件 以下是基本结构:C# XAML如何实例化对象?,c#,wpf,entity-framework,xaml,mvvm,C#,Wpf,Entity Framework,Xaml,Mvvm,我正在使用MVVM模式和实体框架开发一个WPF应用程序。我编写了一个类,其中包含一组从数据库填充的列表。这些列表用于填充组合框和其他`项控件 以下是基本结构: namespace MiniManager.ViewModel { public class LookupLists { public LookupLists() { using (var db = new ModelContext()) {
namespace MiniManager.ViewModel
{
public class LookupLists
{
public LookupLists()
{
using (var db = new ModelContext())
{
Supervisors = db.Users.ToList().Where(u => u.Supervisor);
// More lists...
}
}
public IEnumerable<User> Supervisors { get; set; }
// More lists...
}
}
namespace minimager.ViewModel
{
公共类LookupLists
{
公众形象提升者()
{
使用(var db=new ModelContext())
{
Supervisors=db.Users.ToList(),其中(u=>u.Supervisor);
//更多列表。。。
}
}
公共IEnumerable监视器{get;set;}
//更多列表。。。
}
}
我在视图中使用的类如下所示:
<UserControl.Resources>
<lists:LookupLists x:Key="LookupLists"/>
</UserControl.Resources>
当我需要在控件上使用它时,我绑定到资源中的属性:
<ComboBox ItemsSource="{Binding Source={StaticResource LookupLists},
Path=Supervisors}"/>
我的问题是:
对象持续多长时间?LookupLists
- 只要用户界面处于活动状态李>
- 是否每次视图需要时都会创建
的新实例(从而查询数据库)LookupLists
参考资料中声明的项目将添加到作为框架元素成员的特殊集合中。因此,集合的寿命将与控件的寿命一样长
除非控件被销毁,否则不会进行其他查询(当然,除非您进行了查询)
有关存储资源的属性的更多信息,请参阅。这取决于资源的存储位置和声明资源的方式:
<ComboBox ItemsSource="{Binding Source={StaticResource LookupLists},
Path=Supervisors}"/>
其中:
- 如果将其声明为
UserControl
的本地资源,则该对象将主要引用该资源,并且只要该对象持续,并且GC不收集内存,该资源就会持续
- 如果在
App.xaml
文件中将其声明为全局资源,则它将在应用程序的整个生命周期内可用
如何:
- 默认情况下,资源是共享的,因此只创建一个实例,并且每个引用(例如通过
StaticResource
)都指向相同的唯一对象
- 如果将资源声明为
x:Shared=“False”
,则每个引用都将触发新实例的生成