Windows Phone 7 UserControl で ListPicker の SelectedIndex 属性の双方向バインディングを実行しようとしています。
DataContext を設定すると、次の例外が発生します。
SelectedIndex must always be set to a valid value.
これは XAML コードです
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<toolkit:ListPicker
Grid.Row="0"
x:Name="List1"
SelectionChanged="Picker_SelectionChanged"
SelectedIndex="{Binding PickerSelectedIndex, Mode=TwoWay}"
ItemTemplate="{StaticResource PickerTemplate}"
ItemsSource="{Binding MyList}"/>
</Grid>
そして、DataContext のコード ビハインド
private ObservableCollection<MyClass> myList = null;
public ObservableCollection<MyClass> MyList
{
get { return this.myList; }
set
{
if (value != this.myList)
{
this.myList= value;
NotifyPropertyChanged("MyList");
this.PickerSelectedIndex = 0;
}
}
}
private int pickerSelectedIndex = 0;
public int PickerSelectedIndex
{
get
{
return this.pickerSelectedIndex;
}
set
{
this.pickerSelectedIndex= value;
}
}
ブレークポイントPickerSelectedIndex.get
を入れると、正しく返されることがわかります ( 0
)。この行を削除すると問題がSelectedIndex="{Binding PickerSelectedIndex, Mode=TwoWay}"
解決し、ListPicker に MyList のデータが正しく読み込まれていることがわかります。
どこが問題なのか見当がつかない…