2013-02-18 52 views
0

我有以下類,我才能用它來填充組合框:WPF如何使用DesignerProperties.IsInDesignTool解決設計時錯誤「無法創建實例」?

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行創建一個錯誤(ONLY在設計時,它在運行時完全運行):

無法創建「DamageTypeList」的實例。 C:\ HUB \ HUB \ HubbCostOfferPage.xaml

我以找到了一些建議,以解決這個問題:

if (!DesignerProperties.IsInDesignTool) 

可是我怎麼用它來解決我的問題?

回答

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

+0

哇!我無法相信,你真的解決了我的問題! :-) 你真的很聰明。謝謝你太多了! :-) – Keren 2013-02-19 09:01:52

+0

如果你真的喜歡,你可以得到答案=] – 2013-02-19 16:12:55

1

設計者試圖調用默認的構造函數,但是你的類沒有一個。
您只需將privateinternal默認構造函數添加到您的類中。

+0

我也這麼認爲,試了一下(我嘗試的第一件事之一)。但是這並沒有幫助。 – Keren 2013-02-19 08:57:03

相關問題