我有ListBox
。我后面还有一个list
代码。我希望将listbox
中的所有项目作为list
的来源。
我试过这种方式:
<listBox x:Name="MyList" .../>
list<string> feed = new list<string>();
//to get the source
var feed = MyList.Items.Cast<string>().ToList();
但它引发了例外:System.InvalidCastException
该怎么办?
答案 0 :(得分:3)
您收到错误是因为您的列表不是字符串!尝试获取字符串表示。
List<string> feed = MyList.Items.Cast<object>()
.Select(o => o.ToString()).ToList();
答案 1 :(得分:2)
list<T> feed = new list<T>();
var feed = MyList.Items.Cast<T>().ToList();
这是正确的方法。但是,请查看ListBox中的项目类型。它们可能不是string
类型这就是您收到此错误的原因。您可能没有string
类型的商品。在ListBox中将 T 替换为该类型。或者修复ListBox以使类型为string
的项目。
答案 2 :(得分:1)
我认为萨姆的回答是正确的。如果ListBox的ItemsSource是字符串集合,那么将它们转换为字符串应该不是问题。
MyList.ItemsSource = new List<string>
{
"one","two","three"
};
List<string> feed = MyList.Items.Cast<string>().ToList();
但是如果ListBox的ItemsSource不是字符串集合,那么假设MyClass集合
class MyClass
{
public string MyProperty { get; set; }
public override string ToString()
{
return this.MyProperty;
}
}
然后你必须以适当的类型转换它并选择所需的属性。
MyList.ItemsSource = new List<MyClass>
{
new MyClass {MyProperty ="one"},
new MyClass {MyProperty ="two"},
new MyClass {MyProperty ="three"},
};
List<string> feed = MyList.Items.Cast<MyClass>().Select(c => c.MyProperty).ToList();
但要正确回答您的问题,我们需要了解ListBox的ItemsSource。
答案 3 :(得分:-1)
你知道在wpf中你有Listbox有ListboxItem,你必须先把你的物品兑现给ListboxItem。
在那之后。你将listboxItem.Content推送到你的
List<string> list = new List<string>();
foreach (var item in this.MyList.Items)
{
ListBoxItem castItem = item as ListBoxItem;
list.Add(castItem.Content.ToString());
}
您可以尝试