2

我正在创建一个多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其中显示;

前;

在此处输入图像描述

保存后;

在此处输入图像描述

此链接包含我的 ViewModel 和可绑定列表

捆绑;

 <src:MultiComboBox Grid.Column="1" Grid.Row="9"
                         SelectionMode="Multiple" 
                         VerticalAlignment="Center"
                         DisplaySeparator=", "
                         ItemsSource="{Binding Benefits}"
                         SelectedItems="{Binding SelectedBenefits}">
 </src:MultiComboBox>

我尝试的是而不是像这样接受ObservableCollection<String>aa 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<...CurrentBenefits>.Add(...CurrentBenefits)' 的最佳重载方法匹配有一些无效参数

谁能帮助或建议我应该做些什么来解决我遇到的这个问题?提前致谢 :)。

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

4

1 回答 1

1

在浏览了我的工作之后,在The WPF Room的Maverik的出色帮助下,这与我的存储库有关。

最初,在存储库中插入和更新项目是这样做的,就像这样;

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>
于 2013-04-11T12:53:37.033 回答