使用EF保存后在MutliSelectComboBox中显示项目集合的问题

时间:2013-04-11 08:09:37

标签: c# wpf mvvm combobox multi-select

我正在创建一个多选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内会显示此内容;

enter image description here

保存后;

enter image description here

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)”的最佳重载方法匹配具有一些无效参数

有人可以帮助或建议我应该做些什么来解决这个问题吗?提前致谢 :)。

编辑: 此外,抱歉这么长的问题。

1 个答案:

答案 0 :(得分:1)

在查看我的工作后,在MaverikThe 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>