C# 如何设置selecteditem
我正在尝试从silverlight toolkit for windows phone 7中设置listpicker控件的值/selecteditem(当用户想要编辑xml中的条目时,它会从IO中提取数据并在文本框/listpicker中进行设置) 我目前正在尝试使用:C# 如何设置selecteditem,c#,silverlight,windows-phone-7,silverlight-toolkit,C#,Silverlight,Windows Phone 7,Silverlight Toolkit,我正在尝试从silverlight toolkit for windows phone 7中设置listpicker控件的值/selecteditem(当用户想要编辑xml中的条目时,它会从IO中提取数据并在文本框/listpicker中进行设置) 我目前正在尝试使用: ListPickerSub.SelectedItem = sub; (sub是一个字符串) 但它抛出了一个System.InvalidoOperationException Additional information: Se
ListPickerSub.SelectedItem = sub;
(sub是一个字符串)
但它抛出了一个System.InvalidoOperationException
Additional information: SelectedItem must always be set to a valid value.
确实要在基础数据源中设置数据,然后刷新列表吗?
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.SelectedItem = ListPickerSub.Items.First(x => (x as ListPickerItem).Content.ToString() == sub);
您可能需要将内容强制转换为TextBlock,并相应地更改代码。上述方法适用于我的情况,即使用ListPickerItem动态填充ListPicker。什么是
sub
?它实际上属于列表吗?它是存储中某个元素的值是的,假设我使用了xElement(“子元素”)。值来设置数据绑定。sub是与subElement中的值相同的值。我还尝试(只是为了测试)静态设置listpicker的内容:我像这样填充列表:
@Jamie但是你传递什么作为ItemSource?绑定子名称。我确实尝试过使用:objectindex=subtext.FindName(sub);然后将selecteditem设置为index,但index始终返回为null非常感谢,这很好。我唯一的问题是在我的设置中,我像这样设置listpicker:monday
对于每个值,我使用了双向绑定来设置selecteditem:selecteditem=“{binding Source={StaticResource AppSettings},Path=WeekBeginSetting,Mode=TwoWay}”
此绑定返回正确的值,因为我已使用它设置textblock的文本(仅用于测试)。但是当尝试设置selecteditem时,它会抛出一个系统。ArgumentOutOfRangeException
@Jamie请将此新问题作为新问题提问。如果您可以发布一个完整的示例来演示此问题,这将帮助您获得更快、更相关的答案。另请参阅
ListPickerSub.SelectedItem = "sunday";
ListPickerSub.SelectedItem = ListPickerSub.Items.First(x => (x as ListPickerItem).Content.ToString() == sub);