0

コンボボックスにデータを入力するために使用する次のクラスがあります。

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)

しかし、どうすれば問題を解決できますか?

4

2 に答える 2

3

フラグ DesignerProperties.IsInDesignTool を使用して、DB の作成を防止し、リストでハードコーディングされたエンティティを使用できます。

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が示唆したように、設計時の例外の原因をもう少し調査します。設計時の実行をデバッグすることはできますが、それほど難しいことではありません。このリンクを参照してください。

于 2013-02-18T17:36:19.807 に答える
1

デザイナーは既定のコンストラクターを呼び出そうとしますが、クラスにはコンストラクターがありません。またはデフォルトのコンストラクターをクラス
に追加するだけです。privateinternal

于 2013-02-18T14:56:47.607 に答える