查找选定的WPF列表框条目

时间:2010-05-06 13:14:24

标签: c# wpf .net-3.5

我一直在尝试使用以下代码遍历WPF中列表框的选定项目;

        try
        {
            for (int i = 0; i < mylistbox.SelectedItems.Count; i++)
            {
                ListItem li = (ListItem)mylistbox.SelectedItems[i];

                string listitemcontents_str = li.ToString();
            }
        }
        catch(Exception e)
        {
            // Error appears here
            string error = e.ToString();
        }

但是我收到了无效的强制转换异常;

System.InvalidCastException:无法将类型为“mylist”的对象强制转换为“System.Windows.Documents.ListItem”。

有解决方法吗?

6 个答案:

答案 0 :(得分:5)

答案 1 :(得分:4)

  for (int i = 0; i < mylistbox.SelectedItems.Count; i++)
    {
        List**Box**Item li = (List**Box**Item)mylistbox.SelectedItems[i];

        string listitemcontents_str = li.ToString();
    }

答案 2 :(得分:0)

这应该有效:

       for (int i = 0; i < mylistbox.SelectedItems.Count; i++)
        {
            var li = mylistbox.SelectedItems[i];

            string listitemcontents_str = li.ToString();
        }

答案 3 :(得分:0)

我找到的方法是将列表框分配到对象上,然后将其转换为DataRowView。似乎工作,我可以通过各自的列名访问其中的字段。

object selected = mylistbox.SelectedItem; DataRow row =((DataRowView)选中).Row;
string thecontents = row [“columnname”]。ToString()。TrimEnd();

答案 4 :(得分:0)

您将ListItemListBoxItem混淆。

如果您没有做任何特殊操作,ListBox将为您绑定的数据创建ListBoxItem个容器。 ListItemFlowDocument内使用,基本上是文档中的编号或项目符号。

也就是说,数据绑定会更好。如果您使用的是数据绑定,则SelectedItems将不是ListBoxItem,而是您绑定的实际数据项。您可以将其强制转换为适当的类型并使用它。

答案 5 :(得分:-1)

列表框将其项添加为对象集合,因此无法将其强制转换为ListItem。 因此,为了您的目的,您可以执行以下操作:

for (int i = 0; i < mylistbox.SelectedItems.Count; i++) 
        {           

            string listitemcontents_str = mylistbox.SelectedItems[i].ToString(); 
        } 

如果您真的想使用ListBoxItem,请将这些项目添加到列表框中,例如

ListBoxItem li = new ListBoxItem();
li.Content = "Hello";
mylistbox.Items.Add(li);

然后你可以做你想要的而没有无效的强制转换异常:

for (int i = 0; i < mylistbox.SelectedItems.Count; i++)
            {
            ListBoxItem li = (ListBoxItem)mylistbox.SelectedItems[i];
            string s = li.ToString();
            }