我正在创建一个多选Combobox
,允许用户从combobox
中选择多个项目。到目前为止,我已经通过使用ObservableCollection<string>
实现了这一目标。我希望能够使用我设法做的EntityFramework model
保存此集合,例如
构造
public EmployeeViewModel(DataObjects.Employee e) //Constructor that takes in an employee from EF
: base("")
{
//BenefitsProvided = e.BenefitsProvided; //What I did previously. BenefitsProvided is the field in employee table.
_benefits = new ObservableCollection<string>();
string[] benefit = e.BenefitsProvided.Split(new char[] { ',' }, StringSplitOptions.None);
foreach (var str in benefit)
{
_benefits.Add(str);
}
}
在第一次启动时,我得到一个列表,它允许我查看一个很好的项目列表,我可以选择尽可能多的项目。但是,当我尝试编辑项目时,在ComboBox
内会显示此内容;
在
保存后;
This Link contains my ViewModel and Bindable list
结合
<src:MultiComboBox Grid.Column="1" Grid.Row="9"
SelectionMode="Multiple"
VerticalAlignment="Center"
DisplaySeparator=", "
ItemsSource="{Binding Benefits}"
SelectedItems="{Binding SelectedBenefits}">
</src:MultiComboBox>
我尝试的是,而不是像ObservableCollection<String>
一样ObservableCollection<OfAClass>
就像这样;
public class CurrentBenefits
{
private string[] _Allowed = new string[] {"items", "..."};
public string[] Allowed
{
get { return _Allowed; }
set { _Allowed = value; }
}
}
但是当这样做,并将<string>
更改为<CurrentBenefit>
时,它会在构造函数周围抛出此异常;
错误2参数1:无法从'string'转换为'... CurrentBenefits'
错误1“System.Collections.ObjectModel.Collection&lt; ... CurrentBenefits&gt; .Add(... CurrentBenefits)”的最佳重载方法匹配具有一些无效参数
有人可以帮助或建议我应该做些什么来解决这个问题吗?提前致谢 :)。
编辑: 此外,抱歉这么长的问题。
答案 0 :(得分:1)
在查看我的工作后,在Maverik的The WPF Room的精彩帮助下,这与我的存储库有关。
最初,在存储库中插入和更新项目是这样的,就像这样;
emp.BenefitsProvided = e.Benefits.ToList().ToString();
然后它变成了这个;
emp.BenefitsProvided = string.Join(", ", e.SelectedBenefits);
它完美保存并使用户能够看到他们添加的内容:)。
因为它是collection
,我还必须在ListView
内更改它以显示像这样的项目;
<GridViewColumn Header="BenefitsProvided" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<ListView Height="24"
ItemsSource="{Binding Benefits}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridViewColumn>