1

这段代码给了我一个“参数超出范围”异常。当我删除对 的绑定时SelectedIndexComboBox填充得很好并且没有抛出异常。

知道我做错了什么吗?这(出于某种原因)不可能吗?

代码:

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

4 回答 4

1

我猜SelectedIndex它是一个只读属性。
其他问题可能是 0 它不在集合中

于 2009-12-03T16:31:18.540 回答
1

我认为在 selectedIndex 绑定之前没有添加项目,并且由于没有项目,因此显示 Argument out of Range 异常。

于 2009-12-03T19:49:25.997 回答
1

原来 ComboBox 控件从根本上被破坏了。多亏了 Rockford Lhotka 的这篇文,我们才能够用一个可以正确绑定到 SelectedItem 属性的控件来覆盖 ComboBox 控件。

伊克。

于 2009-12-03T22:41:08.570 回答
0

我会避免从您的 Options 属性返回一个新集合。您假设 WPF 只访问该属性一次。

但是您也可以选择在当前返回 ObservableCollection 的地方使用 CollectionView。如果您使用的是 MVVM 架构,您的 ViewModel 可以将属性公开为 CollectionView 并且它具有“当前”项目的概念。

于 2009-12-03T20:05:02.987 回答