コードをもう少し詳しくチェックする必要があります。以下の簡単なサンプルを作成しましたがSelectedIndex
、コンボが無効になっている場合でも問題なく動作します。高すぎるか低すぎるインデックスを設定しようとするとArgumentOutOfRangeException
、null 参照ではなく が返されます。
Linq クエリを使用してリスト内の項目を検索しているのに、実際に項目が見つかったかどうかを確認していないことはありませんか? プロパティのコンテンツを使用しようとしていてSelectedRegion
、何も選択されていないため null になっている可能性がありますか?
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainPage_Loaded);
}
void MainPage_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = new Data();
cbOrganisation.IsEnabled = false;
cbRegions.IsEnabled = false;
cbOrganisation.SelectedIndex = 2;
cbRegions.SelectedIndex = 3;
}
}
public class Data
{
public Data()
{
OrganisationEntries = new List<Organisation>();
OrganisationEntries.AddRange(new[] {
new Organisation(){ Description = "Acme Products"
,Regions=new List<Region>(){ new Region(){Code="NY", Description="New York"}
,new Region(){Code="FL", Description="Florida"}
}
}
,new Organisation(){ Description = "Acme Investments"
,Regions=new List<Region>(){ new Region(){Code="NY",Description="New York"}
,new Region(){Code="TX", Description="Texas"}
}
}
,new Organisation(){ Description = "Acme Inflatable Cows"
,Regions=new List<Region>(){ new Region(){Code="WY", Description="Wyoming"}
,new Region(){Code="WA",Description="Washington"}
,new Region(){Code="IO", Description="Iowa"}
,new Region(){Code="KY", Description="Kentucky"}
}
}
});
}
public List<Organisation> OrganisationEntries { get; set; }
public Organisation SelectedOrganisation { get; set; }
public int SelectedOrganisationIndex { get; set; }
public Region SelectedRegion { get; set; }
public int SelectedRegionIndex { get; set; }
}
public class Organisation
{
public Organisation()
{
Regions = new List<Region>();
}
public string Description { get; set; }
public List<Region> Regions { get; set; }
}
public class Region
{
public string Code { get; set; }
public string Description { get; set; }
}
<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="150" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<ComboBox x:Name="cbOrganisation"
Grid.Row="0"
Grid.Column="1"
ItemsSource="{Binding OrganisationEntries}"
SelectedItem="{Binding SelectedOrganisation, Mode=TwoWay}"
SelectedIndex="{Binding SelectedOrganisationIndex}"
DisplayMemberPath="Description"
Height="50"
/>
<ComboBox x:Name="cbRegions"
Grid.Row="1"
Grid.Column="1"
ItemsSource="{Binding ElementName=cbOrganisation, Path=SelectedItem.Regions}"
SelectedItem="{Binding SelectedRegion, Mode=TwoWay}"
SelectedIndex="{Binding SelectedRegionIndex}"
DisplayMemberPath="Description"
Height="50"
/>
</Grid>