WPF – привязка к ItemsSource и SelectedIndex вызывает исключение?
-
12-09-2019 - |
Вопрос
Этот код выдает мне исключение «Аргумент вне диапазона».Когда я удаляю привязку к SelectedIndex
, ComboBox
заполняется нормально, и никаких исключений не создается.
Есть идеи, что я делаю неправильно?Это (по каким-то причинам) невозможно?
Код:
public class RuleMap<T> : INotifyPropertyChanged
{
public ObservableCollection<string> Options
{
get
{
return new ObservableCollection(){"A", "B", "C"};
}
}
public int SelectedIndex
{
get
{
return 0;
}
}
}
public ObservableCollection<RuleMap> FilterItemSource;
КСАМЛ:
<ItemsControl ItemsSource="{Binding FilterItemSource}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal"> <ComboBox Width="150" SelectedIndex="{Binding SelectedIndex}"
ItemsSource="{Binding Options}"/>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Решение 3
Оказывается, элемент управления ComboBox был изначально сломан.Благодаря этому Сообщение блога автором Rockford Lhotka, мы смогли переопределить элемент управления ComboBox элементом управления, который мог бы корректно привязываться к свойству SelectedItem.
Ик.
Другие советы
я думаю что SelectedIndex
это свойство только для чтения.
Другая проблема может заключаться в том, что 0 нет в коллекции.
Я думаю, что элементы не добавляются до того, как selectedIndex будет привязан, и, поскольку элементов нет, отображается исключение «Аргумент вне диапазона».
Я бы не стал возвращать новый коллекцию из вашего свойства Options.Вы предполагаете, что WPF обращается к свойству только один раз.
Но у вас также есть возможность использовать CollectionView, в котором вы сейчас возвращаете ObservableCollection.Если вы используете архитектуру MVVM, ваша ViewModel может предоставлять свойство как CollectionView и иметь понятие «текущего» элемента.