Вам нужно будет немного углубиться в свой код. Я сделал быстрый пример ниже, и он отлично работает, установив 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; }
}
</p>
<pre><code><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>