XAML如何实例化对象?

可疑的

我正在使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

XAML如何实例化对象?

来自分类Dev

如何使用工厂方法在XAML中实例化对象

来自分类Dev

如何为未实例化的对象实例化类函数?

来自分类Dev

如何在XAML中使用实例化为资源的对象

来自分类Dev

如何使用反射实例化Scala对象

来自分类Dev

如何使用Clojure实例化Path对象

来自分类Dev

如何在Java中实例化对象?

来自分类Dev

如何摆脱“新”实例化Ruby对象?

来自分类Dev

如何从.json文件实例化js对象

来自分类Dev

如何正确实例化HttpContext对象?

来自分类Dev

如何使用Arduino实例化多态对象

来自分类Dev

如何销毁实例化的游戏对象克隆?

来自分类Dev

如何正确实例化HttpContext对象?

来自分类Dev

如何改善实例化该对象的方式?

来自分类Dev

如何允许无限的对象实例化?

来自分类Dev

如何指向尚未实例化的对象

来自分类Dev

如何使用对象实例化FormSet

来自分类Dev

如何限制实例化的对象数量?

来自分类Dev

如何实例化组中的对象?

来自分类Dev

如何使用空对象实例化接口?

来自分类Dev

如何在 Unity 中实例化对象?

来自分类Dev

从 XAML 强制 ViewModel 实例化

来自分类Dev

如何实例化和使用包含其他对象的对象?

来自分类Dev

实例化文件对象

来自分类Dev

对象的递归实例化?

来自分类Dev

动态实例化对象

来自分类Dev

挂钩对象实例化

来自分类Dev

连接对象实例化

来自分类Dev

移动实例化对象