<DataTemplate x:Name="PickTmplItemTipo">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding tipo}" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Name="PickTmplFullTipo">
<StackPanel Orientation="Horizontal" Margin="0,25,0,0">
<TextBlock Name="lblTipo" Width="350" Text="{Binding tipo}" FontFamily="{StaticResource PhoneFontFamilyLight}" TextWrapping="Wrap" FontSize="{StaticResource PhoneFontSizeExtraLarge}" />
</StackPanel>
</DataTemplate>
<toolkit:ListPicker
Grid.Row="0"
ItemsSource="{Binding}" Margin="21,0,22,0"
Header="{Binding Source={StaticResource LocalizedStrings}, Path=Localizedresources.strTipoUni}"
FullModeHeader="{Binding Source={StaticResource LocalizedStrings}, Path=Localizedresources.strTipoUni}"
FullModeItemTemplate="{Binding Source={StaticResource PickTmplFullTipo}}"
ItemTemplate="{Binding Source={StaticResource PickTmplItemTipo}}"
Name="lPickTipo"
TabIndex="0"
Height="98"
VerticalAlignment="Top"
ExpansionMode="FullScreenOnly"
Tap="lPickTipo_Tap"
SelectionChanged="lPickTipo_SelectionChanged" />
填写listpicker:
List<tipos> _lstTipos { get; set; }
private void cargaLista()
{
using (serviciosDBDataContext miDataContext = new serviciosDBDataContext(conn))
{
_lstTipos = miDataContext.tipos.ToList();
}
this.lPickTipo.ItemsSource = _lstTipos;
}
设置selecteditem:
如果我尝试这样做,则返回此错误“必须始终将SelectedItem设置为有效值。”
this.lPickTipo.SelectedItem = myStringValue;
如果我尝试下一件事,则返回null错误:
this.lPickTipo.SelectedItem = lPickTipo.Items.First(x => (x as ListPickerItem).Content.ToString() == myStringValue);
但我无法通过selectindex设置,因为我不知道哪个索引等效
答案 0 :(得分:5)
如果您有对tip的引用(或者如果您覆盖tipo的相等运算符):
this.lPickTipo.SelectedItem = yourTipo;
(例如:this.lPickTipo.SelectedItem = _lstTipos[2];
)
否则:
this.lPickTipo.SelectedItem = this.lPickTipo.Items.OfType<tipos>().First(i => i.tipo == myStringValue);
答案 1 :(得分:1)
您的列表绑定到tipos
类型的项目,但您尝试将所选项目设置为字符串值,它将找不到。 SelectedItem
属性需要其中一个绑定项,如果没有选择,则为“null”。
尝试将其设置为_lstTipos
列表中的一个值,例如:
this.lPickTipo.SelectedItem = _listTipos.First();
PS。我没有尝试过这个ListPicker控件,但我相信这通常适用于WPF控件。
BTW看起来像是this的欺骗。
答案 2 :(得分:1)
如果您尝试使用Linq请求来检索索引,该怎么办?
假设您的列表中没有任何重复
this.lPickTipo.SelectedItem = _lstTipos.IndexOf(_lstTipos.Single(s => s == myStringValue));