我使用以下类来填充组合框:
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)
但是如何使用它来解决我的问题呢?
答案 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)
设计者试图调用默认构造函数,但是你的类没有
您只需要在班级中添加private
或internal
默认构造函数。