Windows phone 8 &引用;SelectedIndex必须始终设置为有效值";wp8中的listpicker问题

Windows phone 8 &引用;SelectedIndex必须始终设置为有效值";wp8中的listpicker问题,windows-phone-8,Windows Phone 8,我在这个网站上尝试了这里给出的所有解决方案,但在我的案例中都失败了。 甚至没有解决我的问题。请提出任何其他解决方案或向我解释为什么它不起作用 我有一个产品列表选择器,它被绑定在代码后面,比如 listpickerProducts.ItemSourde= 下面的代码是用OnNavigateTo方法编写的,用于更改此listpicker的selectedIndex,但它会引发异常,因为它总是将selectedIndex设置为-1 listpickerProducts.ItemSourde = &

我在这个网站上尝试了这里给出的所有解决方案,但在我的案例中都失败了。 甚至没有解决我的问题。请提出任何其他解决方案或向我解释为什么它不起作用

我有一个产品列表选择器,它被绑定在代码后面,比如

listpickerProducts.ItemSourde=

下面的代码是用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`

任何帮助都将不胜感激。

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

  • 尝试在
    listpickerProducts.Loaded
    事件中设置索引。如果这行得通,你就可以走了
  • 注释掉设置索引的行。根本不要设置索引。现在,运行该应用程序并确保您的
    列表选择器
    中确实填充了项目。可能存在一些绑定错误,
    ListPicker
    可能有零项,使得索引1无效
  • 试试这个:

    它将帮助您:

    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();
            }
        }
    }
    

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

    在this.Loaded事件中设置所选索引,而不是OnNavigatedTo。我猜您正在尝试在构建UI之前设置UI事件谢谢。我也尝试过。但是没有任何区别(如果您正在绑定,我建议您也绑定所选索引。@PeterRitchie我不明白。我的意思是,如何绑定所选索引??在xaml代码中??您能否显示
    listpickerProducts\u SelectionChanged
    ?在黑暗中拍摄,但我怀疑您将
    SelectedItem=null
    (或
    selectedIndex=-1
    )此事件结束时。在下一行中,设置
    SelectedIndex
    ,将触发所述事件,并将
    null
    放入
    ListPicker。项
    作为ListPicker的异常原因(如错误所述)必须有一个有效的索引>=0;感谢您的回答。按照第二种方法,我的listpicker填充得很好,正如我所需要的..但我真正想要的是..每当我回到这个页面..那时..我带着一个索引值..我想在这里设置为listpickerProducts的selectedIndex。正如我所指定的,每次都取-1当加载页面时。因此,当我有一个新的索引值要设置时,它不允许我更改。我的问题不在selectionChanged事件中。它工作正常。但是,我想要的是,每当我来到这个页面时,它应该允许我设置一个从其他地方获取的索引值。我希望我的listpicker用t选择他是我想要的。
        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();
           }
         }    
    
    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();
            }
        }
    }