WPF如何使用DesignerProperties.IsInDesignTool来解决设计时错误“无法创建实例”?

时间:2013-02-18 14:35:00

标签: wpf design-time

我使用以下类来填充组合框:

public class DamageTypeList
{
    static Begbil2Entities _DB = new Begbil2Entities();
    public static List<HUB_DamageTypes> _list = (from d in _DB.HUB_DamageTypes orderby d.DamageOrder select d).ToList(); 

    public static List<HUB_DamageTypes> TList
    {
        get
        {
            return _list;
        }
    }
 }

在xaml文件中,我这样添加:

<UserControl.Resources>
    <me:DamageTypeList  x:Key="DamageTypeList"/>

xaml行会产生错误(仅在设计时,它会在运行时完美运行):

无法创建“DamageTypeList”的实例。 C:\ HUB \ HUB \ HubbCostOfferPage.xaml

我找到了一些建议来解决它:

if (!DesignerProperties.IsInDesignTool)

但是如何使用它来解决我的问题呢?

2 个答案:

答案 0 :(得分:3)

您可以使用标志DesignerProperties.IsInDesignTool来阻止数据库创建并在列表中使用硬编码实体。

public class DamageTypeList
{
    static Begbil2Entities _DB;
    public static List<HUB_DamageTypes> _list;

    public static Begbil2Entities DB
    {
        get
        {
            if(_DB == null && !DesignerProperties.IsInDesignTool)
                _DB = new Begbil2Entities();
            return _DB;
        }
    }

    public static List<HUB_DamageTypes> TList
    {
        get
        {
            if(_list == null)
            {
                if(!DesignerProperties.IsInDesignTool)
                    _list = (from d in DB.HUB_DamageTypes orderby d.DamageOrder select d).ToList(); 
                else
                    _list = new List<HUB_DamageTypes>(){
                        // Initialize it with hardcoded values
                    };
            }
            return _list;
        }
    }
 }

在这样做之前,很难,我会​​进一步调查设计时异常的原因是什么,正如@fhlamarche建议的那样。您可以尝试调试设计时执行,并不难。请参阅this link

答案 1 :(得分:1)

设计者试图调用默认构造函数,但是你的类没有 您只需要在班级中添加privateinternal默认构造函数。