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 が Binded される前に Items が追加されていないと思います。項目がないため、Argument out of Range 例外が表示されています。

于 2009-12-03T19:49:25.997 に答える
1

SelectedIndexReadOnly プロパティだと思います。
他の問題は、0がコレクションにないことです

于 2009-12-03T16:31:18.540 に答える
1

そもそも ComboBox コントロールが根本的に壊れていたことが判明しました。Rockford Lhotka によるこのブログ投稿のおかげで、SelectedItem プロパティに正しくバインドできるコントロールで ComboBox コントロールをオーバーライドすることができました。

イク。

于 2009-12-03T22:41:08.570 に答える
0

Optionsプロパティから新しいコレクションを返すことは避けます。WPFがプロパティにアクセスするのは1回だけであると想定しています。

ただし、現在ObservableCollectionを返しているCollectionViewを使用するオプションもあります。MVVMアーキテクチャを使用している場合、ViewModelはプロパティをCollectionViewとして公開でき、「現在の」アイテムの概念があります。

于 2009-12-03T20:05:02.987 に答える