为什么ListBox中的选定项会在表达式混合中引发错误?

时间:2011-06-15 22:26:51

标签: expression-blend

我正在使用以下链接http://visitmix.com/labs/rosetta/EyesOfBlend/DataTemplates/学习表达混合 这是一个关于使用表达式混合的非常好的一步一步的指导。我能够成功完成所有步骤,并且能够运行程序并获得最终结果。

在步骤(9)之后,在运行项目之前,当我检查设计器时,设计者没有在我在步骤(9)中添加的大图像控件中显示图像。我知道为什么,因为ListBox的选定索引是-1,所以我将selectedindex更改为0,现在我能够看到图像。但是当我编译代码时,我得到以下错误

“指定的参数超出了有效值的范围。参数名称:SelectedIndex”

XAML

<Grid x:Name="LayoutRoot" Background="White" DataContext="{Binding Source={StaticResource SampleDataSource}}">
    <Grid x:Name="itemGrid" DataContext="{Binding SelectedItem, ElementName=listBox}">
        <Image Margin="185,56,153,160" Stretch="Fill" Source="{Binding Name}"/>
    </Grid>
    <ListBox x:Name="listBox" SelectedIndex="0" Margin="8,0,0,8" ItemsSource="{Binding Collection}" ItemTemplate="{StaticResource ItemTemplate1}" ItemsPanel="{StaticResource ItemsPanelTemplate1}" Height="101" VerticalAlignment="Bottom"/>
</Grid>

如果删除所选索引,则编译好。有人可以解释为什么它在编译后第一次显示,它停止工作了吗?

由于

2 个答案:

答案 0 :(得分:2)

您几乎总是比SelectedIndex更好地绑定到SelectedItem。如果Item为null,则绑定应该正常失败。

答案 1 :(得分:1)

这可能是因为“Collection”属性在呈现列表框后绑定到itemsource 。因此,如果没有集合(空),则第一个索引[0]不存在,并抛出“超出范围的异常”。

要解决您的问题,请在填充后设置代码隐藏中的选定索引。希望有所帮助。