2

Entity Frameworkとを使用してアプリケーションを作成していますMVVM。私のアプリ内には、次のリンクcomboboxを使用して作成した があります

このリンク内で、まさに私が達成したいことです。ユーザーがコンボボックスから複数の項目を選択できるようにします。下の画像は、私が作成したいものをよりよく理解するのに役立ちます.

コンボボックス

ここまでは順調ですね。ただし、アプリケーション内では、エンティティProperties内のデータ オブジェクトに my を割り当てて、EntityFrameworkデータをデータベースに保存します。

VM コンストラクター。

    public EmployeeViewModel(DataObjects.Employee e)
        : base("")
    {
        EmployeeID = e.EmployeeID;
        Title = e.Title;
        FirstName = e.FirstName;
        Surname = e.Surname;
        Position = e.Position;
     }

ただし、Web リンクの例のように、コンボボックスがバインドされる型は次のとおりです。

private Dictionary<string, object> _items;
public Dictionary<string, object> Items
    {
        get
        {
             return _items;
        }
        set
        {
             _items = value;
             OnPropertyChanged("Items");
        }
    }

したがって、コンストラクター内で次のようなことを行うと、次のエラーが発生します。

 Items = e.BenefitsProvided;

エラー 1 型 'string' を 'System.Collections.Generic.Dictionary' に暗黙的に変換できません

それが私の質問につながります。Dictionary<string, object>nvarcharであるBenefitsProvidedという従業員テーブルにあるタイプにタイプを割り当てるにはどうすればよいですか? 使用できるコンバーターはありますか?

これを達成するためのヘルプまたは代替方法は非常に高く評価されます。

4

1 に答える 1

0

あなたのモデルを正しく理解している場合、プロパティBenefitsProvidedstring、従業員のさまざまな福利厚生をコンマ区切りリストの文字列として含む"Voucher,Accomodation,Medical"です。この場合、文字列を部分文字列の配列に分割し、この配列を使用して辞書を作成できます。

Items = new Dictionary<string, object>();
string[] elements = e.BenefitsProvided.Split(',');
foreach (var element in elements)
    Items.Add(element, element);

または、LINQ を使用してよりコンパクトな形式で:

Items = e.BenefitsProvided.Split(',').ToDictionary(s => s, s => (object)s);

ここでは、辞書のstringキーとobject値の両方が同じテキストであると想定していました。

于 2013-03-29T14:04:50.447 に答える