簡體   English   中英

ListBox.SelectedItems如果文本相同則獲取索引

[英]ListBox.SelectedItems Get Index If Same Text

有一個雇員列表框,雇員可以出現兩次,因為雇員可以具有多個屬性。

 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());
                    }

如果實例相同,那么兩次添加又有什么問題? 無論如何,請參見此答案( 列表框的選擇錯誤,其中列表項是值類型/結構並包含重復項? ),以尋求可能的解決方法。

從本質上講,WPF中的ListBox似乎無法獲取所有選定的索引,因此,如果選擇兩個相同的對象,則只會獲取列表中第一個實例的選擇索引。 然后,解決方案是將您的員工包裝到具有某些唯一ID的包裝器中。

我認為不更改文本的最佳方法是創建一個邏輯循環,以便記錄和比較重復的索引。

正常使用的最佳方法就是命名不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM