2009-12-03 118 views
0

此代码给我一个“参数超出范围”异常。当我删除绑定到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> 
+0

查看下面的答案(不能标记我自己2天)。 – 2009-12-03 23:02:58

回答

1

原来,ComboBox控件从根本上被打破。感谢Rockford Lhotka的这个Blog Post,我们能够用一个可以正确绑定到SelectedItem属性的组件覆盖ComboBox控件。

Ick。

1

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

1

我认为ItemsIn未被添加之前selectedIndex是绑定,并且因为没有项目,它显示的参数超出范围异常。

+1

这是真的,但不是解决问题的方法:) – 2009-12-03 23:01:34

0

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

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