問題が解決しました - この投稿の下部を参照してください- nullreferenceexception が発生し続けており、その理由がわかりません。2 つのコンボボックスがあり、一方の値を選択すると、もう一方のコンボボックスに関連する値のセットが設定されます。
<CollectionViewSource x:Key="branchesViewSource"
Source="{Binding Path=Branches, Source={StaticResource contactDBDataSet}}" />
<CollectionViewSource x:Key="ranksViewSource"
Source="{Binding Path=RankPath, Source={StaticResource contactDBDataSet}}" />
private void loadBranches()
{
DocMan.ContactDBDataSet contactDBDataSet = ((DocMan.ContactDBDataSet)(this.FindResource("contactDBDataSet")));
// Load data into the table Branches. You can modify this code as needed.
DocMan.ContactDBDataSetTableAdapters.BranchesTableAdapter contactDBDataSetBranchesTableAdapter = new DocMan.ContactDBDataSetTableAdapters.BranchesTableAdapter();
contactDBDataSetBranchesTableAdapter.Fill(contactDBDataSet.Branches);
System.Windows.Data.CollectionViewSource branchesViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("branchesViewSource")));
branchesViewSource.View.MoveCurrentToFirst();
}
上記は問題なく機能し、最初のコンボボックスにデータが入力されます。この 2 番目のコード ブロックは、2 番目のコンボボックスに入力する必要があります。
DocMan.ContactDBDataSet contactDBDataSet = ((DocMan.ContactDBDataSet)(this.FindResource("contactDBDataSet")));
// Retrieve branchComboBox SelectedItem
string currentItem = ((DataRowView)branchComboBox.SelectedItem)["Branch"].ToString();
// Load data into table Ranks
switch (currentItem)
{
case "Army":
rankPath = "ArmyRanks";
DocMan.ContactDBDataSetTableAdapters.ArmyRanksTableAdapter contactDBDataSetArmyRanksTableAdapter = new ContactDBDataSetTableAdapters.ArmyRanksTableAdapter();
contactDBDataSetArmyRanksTableAdapter.Fill(contactDBDataSet.ArmyRanks);
break;
case "Navy":
rankPath = "NavyRanks";
DocMan.ContactDBDataSetTableAdapters.NavyRanksTableAdapter contactDBDataSetNavyRanksTableAdapter = new ContactDBDataSetTableAdapters.NavyRanksTableAdapter();
contactDBDataSetNavyRanksTableAdapter.Fill(contactDBDataSet.NavyRanks);
break;
case blahblahblah and more cases
}
// Populate rankComboBox
System.Windows.Data.CollectionViewSource ranksViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("ranksViewSource")));
ranksViewSource.View.MoveCurrentToFirst();
}
最後の行で nullreferenceexception が発生しており、基本的にranksViewSource.Viewがnullであることを示しています。コードの最初のブロックと比較すると、branchsViewSource.View は System.Windows.Data.BindingListCollectionView 型です。事前にどんな助けや洞察も大歓迎です。
_---- _ ----
新しいバインディングを作成し、バインディングのソースとパスを設定してから、必要に応じてコンボボックスの SetBinding() メソッドを適用する必要がありました。
DocMan.ContactDBDataSet contactDBDataSet = ((DocMan.ContactDBDataSet)(this.FindResource("contactDBDataSet")));
// Create binding
Binding rankBinding = new Binding();
// Retrieve branchComboBox SelectedItem
string currentItem = branchComboBox.SelectedValuePath;
// Load data into table Ranks
switch (currentItem)
{
case "Army":
rankBinding.Path = new PropertyPath("ArmyRanks");
rankBinding.Source = this.FindResource("rankViewSource");
rankComboBox.SetBinding(ComboBox.ItemsSourceProperty, rankBinding);
DocMan.ContactDBDataSetTableAdapters.ArmyRanksTableAdapter contactDBDataSetArmyRanksTableAdapter = new ContactDBDataSetTableAdapters.ArmyRanksTableAdapter();
contactDBDataSetArmyRanksTableAdapter.Fill(contactDBDataSet.ArmyRanks);
// Populate rankComboBox
CollectionViewSource armyRanksViewSource = ((System.Windows.Data.CollectionViewSource)(this.FindResource("rankViewSource")));
armyRanksViewSource.View.MoveCurrentToFirst();