将selecteditem设置为listpicker

时间:2012-05-08 15:18:47

标签: windows-phone-7 selecteditem listpicker

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#

填写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设置,因为我不知道哪个索引等效

3 个答案:

答案 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));