我一直在尝试使用以下代码遍历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”。
有解决方法吗?
答案 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)
您将ListItem
与ListBoxItem
混淆。
如果您没有做任何特殊操作,ListBox
将为您绑定的数据创建ListBoxItem
个容器。 ListItem
在FlowDocument
内使用,基本上是文档中的编号或项目符号。
也就是说,数据绑定会更好。如果您使用的是数据绑定,则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();
}