我正在尝试设置listpicker控件的值/ selecteditem - 来自windows phone 7的silverlight工具包(当用户想要编辑xml中的条目时,它会从IO中提取数据并在文本中设置它盒/ listpickers)。
我目前正在尝试使用:
ListPickerSub.SelectedItem = sub;
(sub是一个字符串)
但它抛出了System.InvalidOperationException
Additional information: SelectedItem must always be set to a valid value.
答案 0 :(得分:3)
SelectedItem
期待一个ListPickerItem(它是列表中的一个项目)。你传给它一个字符串 - 因此错误。
您可能会发现设置SelectedIndex
更容易。
很难给出一个相关的设置SelectedItem的例子,而不知道你用什么填充列表。
修改强>
这是一个如何绑定到字符串的示例。如果没有关于你实际绑定到itemsource的可行示例,那么我可以做到最好。 (仅提供对象或部分代码的名称是不够的。)
假设:
<Controls:ListPicker x:Name="ListPickerSub">
<Controls:ListPicker.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</Controls:ListPicker.ItemTemplate>
<Controls:ListPicker.FullModeItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" />
</DataTemplate>
</Controls:ListPicker.FullModeItemTemplate>
</Controls:ListPicker>
然后我可以用以下内容绑定内容:
ListPickerSub.ItemsSource = SubItems();
private IEnumerable<string> SubItems()
{
yield return "monday";
yield return "tuesday";
yield return "wednesday";
yield return "thursday";
yield return "friday";
yield return "saturday";
yield return "sunday";
}
并将SelectedItem
设置为:
ListPickerSub.SelectedItem = "sunday";
答案 1 :(得分:2)
如下所示:
ListPickerSub.SelectedItem = ListPickerSub.Items.First(x => (x as ListPickerItem).Content.ToString() == sub);
您可能需要将内容强制转换为TextBlock,并相应地更改代码。以上情况适用于使用ListPickerItem动态填充ListPicker的情况。
答案 2 :(得分:0)
当然,您想要在基础数据源中设置数据,然后只刷新列表吗?