如何使用ListBox.Items作为List <string> </string>的Itemsource

时间:2014-09-10 02:34:27

标签: c# wpf list listbox

我有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

该怎么办?

4 个答案:

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

您可以尝试