此代码为我提供了“参数超出范围”异常。当我删除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>
答案 0 :(得分:1)
我猜SelectedIndex
它是一个ReadOnly属性
其他问题可能是0它不在集合中
答案 1 :(得分:1)
我认为在selectedIndex为Binded之前不会添加Items,并且因为没有item,所以它显示Argument超出Range范围。
答案 2 :(得分:1)
原来,ComboBox控件从根本上被打破了。感谢Rockford Lhotka的Blog Post,我们能够使用可以正确绑定到SelectedItem属性的控件来覆盖ComboBox控件。
伊克。
答案 3 :(得分:0)
我会避免从您的选项属性中返回新集合。您假设WPF只访问该属性一次。
但您也可以选择使用CollectionView,当前正在返回ObservableCollection。如果您使用的是MVVM体系结构,则ViewModel可以将该属性公开为CollectionView,并且它具有“当前”项目的概念。