我要做的就是为列表框中的每个值比较一个已选择的值,然后将匹配索引设置为选中。 出于某种原因,提出了标题中的例外情况。我不明白为什么。 代码:
foreach(SurfaceListBoxItem n in BackgroundsList.Items)
{
if (n.ToString() == current) BackgroundsList.SelectedItem = n;
}
谢谢!
答案 0 :(得分:2)
在WPF中,List.Items不一定包含ListBoxItem的集合,而是只包含数据值,并且派生数据的Item Container,要设置值,您必须简单地将当前设置为所选项目。
无需迭代,您可以简单地执行以下操作,
BackgroundsList.SelectedItem = current;
答案 1 :(得分:2)
C#foreach语句根据Items
返回到指定SurfaceListBoxItem
类型的元素类型为您执行隐式转换。在运行时,返回的string
无法转换为SurfaceListBoxItem
。您可以使用var
代替SurfaceListBoxItem
foreach(var n in BackgroundsList.Items)
{
if (n.ToString() == current) BackgroundsList.SelectedItem = n;
}
或者,当然,您可以使用LINQ:
BackgroundsList.SelectedItem = (
from n in BackgroundList.Items
where n.ToString() == current
select n).FirstOrDefault();