ListBox.SelectedItems获取索引如果是相同的文本

时间:2015-09-22 19:48:49

标签: c# wpf listbox

拥有员工列表框,员工可以出现两次,因为员工可以拥有多个属性。

 List<Employee> employees = new List<Employee>();
            foreach (var item in employeeListBox.SelectedItems)
            {
                employees.Add(company.getEmployees()[employeeListBox.Items.IndexOf(item)]);
            }

目前正在使用上面的代码,但如果同一名员工出现两次,则只会将该员工的第一个实例添加到列表中。

如果我尝试添加两个实例,则只添加第一个实例两次。

除了更改列表框中的文本还有另一种方法可以获得员工的索引吗?

  public void addEmployee(Employee emp)
        {
            if (employees == null)
                employees = new List<Employee>();
            employees.Add(emp);
        }

        public void removeEmployee(Employee emp)
        {
            employees.Remove(emp); 
        }

        public List<Employee> getEmployees()
        {
            return this.employees; 
        }

 company = Company.Load(Utilities.ComanySerialized);
                if (company.getEmployees() != null)
                    foreach (Employee b in company.getEmployees())
                    {
                        employeeListBox.Items.Add(b.getLastName() + " " + b.getFirstName() + "; " + b.getDateOfBirth());
                    }

2 个答案:

答案 0 :(得分:0)

如果实例相同,那么将它添加两次会有什么问题?无论如何,请参阅此答案(Selection bug for listbox where the list items are value types / structs and contain duplicates?)以获取潜在的解决方法。

基本上,WPF中的ListBox似乎没有办法获取所有选定的indeces,因此如果选择两个相同的对象,则只能获得列表中第一个实例的选择索引。然后解决方案是将Employees包装成具有一些唯一ID的包装器。

答案 1 :(得分:0)

我认为不改变文本的最佳方法是创建一个逻辑循环,以便记录和比较重复索引......复杂的东西

正常使用的最佳方式就是将其命名为不同。