" SelectedIndex必须始终设置为有效值" wp8中的listpicker问题

时间:2014-06-13 15:09:53

标签: windows-phone-8

我已尝试过本网站提供的所有解决方案,但在我的情况下都失败了。 即使this也没有解决我的问题。请建议任何其他解决方案或解释我为什么不起作用。

我有一个产品列表选择器,它在代码背后绑定了

listpickerProducts.ItemSourde = <myProductList>

以下代码用 OnNavigateTo 方法编写,以更改此listpicker的selectedIndex,但它会抛出异常,因为它始终设置selectedIndex = -1。

  listpickerProducts.ItemSourde = <myProductList>

  listpickerProducts.SelectionChanged += listpickerProducts_SelectionChanged;

  listpickerProducts.SelectedIndex = 1; //Here it throws exception : SelectedIndex must always be set to a valid value`

我的xaml代码如下:

 <toolkit:ListPicker x:Name="listpickerProducts">
                <toolkit:ListPicker.FullModeItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock x:Name="txtPID" Text="{Binding PID}" Visibility="Collapsed"/>
                            <TextBlock x:Name="txtProdName" Text="{Binding ProdName}" FontSize="30"/>
                            <TextBlock x:Name="txtUnit" Text="{Binding Unit}" Visibility="Collapsed"/>

                        </StackPanel>
                    </DataTemplate>
                </toolkit:ListPicker.FullModeItemTemplate>
                <toolkit:ListPicker.ItemTemplate>
                    <DataTemplate>
                        <StackPanel>
                            <TextBlock x:Name="txtPID" Text="{Binding PID}" Visibility="Collapsed"/>
                            <TextBlock x:Name="txtProdName" Text="{Binding ProdName}" />
                            <TextBlock x:Name="txtUnit" Text="{Binding Unit}" Visibility="Collapsed"/>
                        </StackPanel>
                    </DataTemplate>
                </toolkit:ListPicker.ItemTemplate>
            </toolkit:ListPicker>

listpickerProducts_SelectionChanged事件如下:

    private void listpickerProducts_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {          
       int index = listpickerProducts.SelectedIndex;
     //  MessageBox.Show(index.ToString());
       if (index >= 0) 
       { 
         lblUnit.Text = (listpickerProducts.SelectedItem as Products).Unit.ToString();
         lblRateValue.Text = (listpickerProducts.SelectedItem as Products).Rate.ToString();
       }
     }    

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

我认为异常消息本身非常有用。导航到页面时,您正在设置选定的索引。此时,ListPicker甚至可能无法加载。即使它已加载,它还没有完成绑定。因此,它没有任何项目,索引1无效。您可以在这里尝试几种方法。

  1. 尝试在listpickerProducts.Loaded事件中设置索引。如果可行的话,你就可以了。
  2. 注释掉设置索引的行。根本不设置索引。现在,运行该应用并确保您的ListPicker确实填充了项目。可能存在一些绑定错误,ListPicker可能没有项目使索引1无效。

答案 1 :(得分:0)

试试这个:

它会帮助你:

private void listpickerProducts_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    if (listpickerProducts.SelectedIndex > -1)
    {
        int index = listpickerProducts.SelectedIndex;
        if (index >= 0)
        {
            lblUnit.Text = (listpickerProducts.SelectedItem as Products).Unit.ToString();
            lblRateValue.Text = (listpickerProducts.SelectedItem as Products).Rate.ToString();
        }
    }
}

答案 2 :(得分:0)

另一件事是ListPicker似乎需要在您的产品对象中实现Equals,或者在项目源中使用哪个类。 解决了我的问题。