我使用Entity Framework
和MVVM
创建了一个应用程序。在我的应用中,我使用the following link
combobox
在这个链接中,这正是我想要实现的目标。允许用户从组合框中选择多个项目。下面的图片将让您更好地了解我想要创建的内容。
到目前为止一切顺利。但是在我的应用程序中,我将Properties
分配给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>
分配给名为BenefitsProvided的Employee表中的类型,这是一个nvarchar?有没有可以使用的转换器?
非常感谢任何帮助或其他方法来实现这一目标。
答案 0 :(得分:0)
如果我正确理解了您的模型,则属性BenefitsProvided
是string
,其中包含员工作为逗号分隔列表中的字符串的各种好处,例如"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
值都应该是相同的文本。