1

XAML

 <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" />

C#

填写列表选择器:

    List<tipos> _lstTipos { get; set; }
    private void cargaLista()
    {
        using (serviciosDBDataContext miDataContext = new serviciosDBDataContext(conn))
        {
            _lstTipos = miDataContext.tipos.ToList();
        }

        this.lPickTipo.ItemsSource = _lstTipos;
    }

设置所选项目:

如果我尝试此操作,则返回此错误“必须始终将 SelectedItem 设置为有效值。”

this.lPickTipo.SelectedItem = myStringValue;

如果我尝试下一件事,则返回 null 错误:

this.lPickTipo.SelectedItem = lPickTipo.Items.First(x => (x as ListPickerItem).Content.ToString() == myStringValue);

但我不能通过 selectindex 设置,因为我不知道哪个索引等效

4

3 回答 3

5
  • 如果您有对tipo 的引用(或者如果您覆盖了tipo 的相等运算符):

    this.lPickTipo.SelectedItem = yourTipo;
    

(例如this.lPickTipo.SelectedItem = _lstTipos[2];:)

  • 否则:

    this.lPickTipo.SelectedItem = this.lPickTipo.Items.OfType<tipos>().First(i => i.tipo == myStringValue); 
    
于 2012-05-08T15:38:31.220 回答
1

您的列表绑定到类型的项目,tipos但您试图将所选项目设置为一个字符串值,它不会找到。该SelectedItem属性需要绑定项之一,如果没有选择任何一项,则为 `null。

尝试将其设置为_lstTipos列表中的值之一,例如:

this.lPickTipo.SelectedItem = _listTipos.First();

PS。我没有尝试过这个 ListPicker 控件,但我相信这就是它通常与 WPF 控件一起工作的方式。

顺便说一句,看起来这是一个骗局

于 2012-05-08T15:39:58.937 回答
1

如果您尝试使用 Linq 请求来检索索引会怎样?

假设您的列表中没有任何重复项

this.lPickTipo.SelectedItem = _lstTipos.IndexOf(_lstTipos.Single(s => s == myStringValue));
于 2012-05-08T15:41:11.293 回答