您将需要更深入地检查您的代码。我做了下面的快速示例,SelectedIndex
即使禁用组合,它也可以正常设置。如果您尝试设置一个过高或过低的索引,那么您会得到一个ArgumentOutOfRangeException
,而不是空引用。
也许您正在使用 Linq 查询来查找列表中的项目,但不检查是否确实找到了项目?也许您正在尝试使用该SelectedRegion
属性的内容并且它为空,因为没有选择任何内容?
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>