2009-12-03 4 views
0

이 코드는 "범위를 벗어난 인수"예외를 제공합니다. SelectedIndex에 대한 바인딩을 제거하면 ComboBox이 잘 채워지고 예외가 발생하지 않습니다.WPF - ItemsSource에 바인딩하고 SelectedIndex가 예외를 throw합니까?

내가 뭘 잘못하고 있는지 알기! 이것은 (어떤 이유로) 불가능한가요?

코드 :

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 일 동안 자신을 표시 할 수 없음). –

답변

1

ComboBox 컨트롤은 근본적으로 부러졌습니다. Rockford Lhotka의 Blog Post 덕분에 SelectedItem 속성에 올바르게 바인딩 할 수있는 ComboBox 컨트롤을 재정의 할 수있었습니다.

Ick.

1

나는 그것이 읽기 전용 속성입니다 SelectedIndex 추측.
0이 컬렉션에없는 것일 수 있습니다.

1

selectedIndex가 Binded되기 전에 항목이 추가되지 않고 항목이 없기 때문에 Argument out of Range 예외가 표시됩니다.

+1

이것은 사실이지만 문제의 해결책은 아닙니다. :) –

0

옵션 속성에서 컬렉션을 반환하지 않는 것이 좋습니다. WPF는 속성에 한 번만 액세스한다는 가정을하고 있습니다.

그러나 현재 ObservableCollection을 반환하고있는 곳의 CollectionView도 사용할 수 있습니다. MVVM 아키텍처를 사용하는 경우 ViewModel은 CollectionView로 속성을 노출 할 수 있으며 "현재"항목의 개념을가집니다.

관련 문제