我已尝试过本网站提供的所有解决方案,但在我的情况下都失败了。 即使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();
}
}
任何帮助将不胜感激。
答案 0 :(得分:1)
我认为异常消息本身非常有用。导航到页面时,您正在设置选定的索引。此时,ListPicker
甚至可能无法加载。即使它已加载,它还没有完成绑定。因此,它没有任何项目,索引1无效。您可以在这里尝试几种方法。
listpickerProducts.Loaded
事件中设置索引。如果可行的话,你就可以了。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,或者在项目源中使用哪个类。 解决了我的问题。