WPF – привязка к ItemsSource и SelectedIndex вызывает исключение?

StackOverflow https://stackoverflow.com/questions/1840958

Вопрос

Этот код выдает мне исключение «Аргумент вне диапазона».Когда я удаляю привязку к 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 и иметь понятие «текущего» элемента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top