Почему выбранный элемент в ListBox вызывает ошибку в выражении blend? - PullRequest
1 голос
/ 16 июня 2011

Я изучаю смесь выражений, используя следующую ссылку http://visitmix.com/labs/rosetta/EyesOfBlend/DataTemplates/ Это очень хорошая пошаговая инструкция по использованию выражения blend. Я смог успешно выполнить все шаги, запустить программу и получить конечный результат.

Сразу после шага (9), перед запуском проекта, когда я проверял конструктор, дизайнер не показывал изображение в элементе управления большим изображением, которое я добавил на шаге (9). Я знал, почему, поскольку выбранный индекс ListBox был равен -1, поэтому я изменил выбранный индекс на 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 ]

2 голосов
/ 16 июня 2011

Вы почти всегда лучше привязываете к SelectedItem, чем к SelectedIndex.Если элемент равен нулю, привязка должна завершиться изящно.

1 голос
/ 16 июня 2011

Вероятно, это связано с тем, что атрибут "Collection" привязывается к источнику items после отображения списка. Таким образом, если коллекции нет (пусто), то первый индекс [0] не существует и выдает «исключение вне диапазона».

Чтобы решить вашу проблему, установите выбранный индекс в выделенном коде после заполнения. Надеюсь, это поможет.

...