WPF - привязка к ItemsSource и SelectedIndex вызывает исключение? - PullRequest
0 голосов
/ 03 декабря 2009

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

XAML:

<ItemsControl ItemsSource="{Binding FilterItemSource}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">                                 <ComboBox Width="150" SelectedIndex="{Binding SelectedIndex}"
                          ItemsSource="{Binding Options}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Ответы [ 4 ]

1 голос
/ 04 декабря 2009

Оказывается, элемент управления ComboBox был изначально сломан. Благодаря этому сообщению в блоге от Rockford Lhotka мы смогли переопределить элемент управления ComboBox с помощью элемента управления, который может правильно связываться со свойством SelectedItem.

Ик.

1 голос
/ 03 декабря 2009

Я думаю, что Предметы не добавляются до того, как selectedIndex связывается, и, поскольку нет ни одного предмета, он показывает Аргумент вне диапазона Range.

1 голос
/ 03 декабря 2009

Полагаю, что SelectedIndex это свойство ReadOnly.
Другая проблема может заключаться в том, что 0 его нет в коллекции

0 голосов
/ 03 декабря 2009

Я бы не стал возвращать новую коллекцию из вашего свойства Options. Вы предполагаете, что WPF обращается к свойству только один раз.

Но у вас также есть возможность использовать CollectionView, когда вы в настоящий момент возвращаете ObservableCollection. Если вы используете архитектуру MVVM, ваша ViewModel может представить свойство как CollectionView, и оно имеет понятие «текущий» элемент.

...