我正在使用MVVM模式和实体框架开发WPF应用程序。我编写了一个类,其中包含一堆从数据库填充的列表。列表用于填充ComboBoxes
和其他`ItemsControls。
基本结构如下:
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...
}
}
我在这样的视图中使用类:
<UserControl.Resources>
<lists:LookupLists x:Key="LookupLists"/>
</UserControl.Resources>
当我需要在控件上使用它时,我将绑定到资源中的一个属性:
<ComboBox ItemsSource="{Binding Source={StaticResource LookupLists},
Path=Supervisors}"/>
我的问题是这样的:
LookupLists
对象能持续多长时间?LookupLists
每当视图需要它时,是否创建了一个新实例(并因此查询了数据库)?这取决于您在哪里以及如何声明资源:
在哪里:
如果您将其声明为的本地资源,UserControl
则该对象将主要引用该对象,并且只要该对象持续存在且GC不收集内存,它就会持续存在
如果您在文件中将其声明为全局资源,App.xaml
那么它将在应用程序的整个生命周期中都可用
如何:
默认情况下,资源是共享的,因此仅创建一个实例,并且每个引用(例如,通过StaticResource
)都指向同一唯一对象
如果您将资源声明为,x:Shared="False"
则每个引用将触发新实例的生成
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句