WPF - 绑定到一个ItemsSource和SelectedIndex引发异常?
此代码给我一个“参数超出范围”异常。当我删除绑定到SelectedIndex
时,ComboBox
填充得很好,并且不会引发异常。WPF - 绑定到一个ItemsSource和SelectedIndex引发异常?
任何想法我做错了什么?这(出于某种原因)不可能吗?
代码:
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>
原来,ComboBox控件从根本上被打破。感谢Rockford Lhotka的这个Blog Post,我们能够用一个可以正确绑定到SelectedItem属性的组件覆盖ComboBox控件。
Ick。
我想这SelectedIndex
它是一个只读属性。
其他问题可以是0它不在集合中
我认为ItemsIn未被添加之前selectedIndex是绑定,并且因为没有项目,它显示的参数超出范围异常。
这是真的,但不是解决问题的方法:) – 2009-12-03 23:01:34
我会避免从您的Options属性返回新集合。你假设WPF只访问一次属性。
但是,您也可以选择在当前正在返回ObservableCollection的位置使用CollectionView。如果您使用的是MVVM架构,那么您的ViewModel可以将该属性公开为CollectionView,并且它具有“当前”项目的概念。
查看下面的答案(不能标记我自己2天)。 – 2009-12-03 23:02:58