2

重複の可能性:
.NET の NullReferenceException とは?

会社と地域の 2 つの ComboBox があり (各会社には地域のセットがあることを意味します)、ComboBox_Company に設定されている会社に従って、ComboBox_Region の ItemSource を変更したいと考えています。

会社と地域を表す 2 つのクラスと、決定された会社の地域のリストを返す地域クラスのメソッド (パラメーターとして渡される) があります。

また、ComboBox_Company で選択したアイテムが変更されたときにイベントがトリガーされ、ComboBox_Region ソースをリロードする必要があります。下記参照

private void ComboBox_Company_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   Company selected_company= (Company)ComboBox_Company.SelectedValue;
   Dictionary<int, string> regions = Region.GetLookupListByCompanyID(null, selected_company.ID, false);
   ComboBox_Region.ItemsSource = regions.Values;
}

それにもかかわらず、NullReferenceException エラーが発生し、解決方法がわかりません。

XAML コードは次のとおりです。

<TextBlock Grid.Row="0" Grid.Column="0" Text="{x:Static props:ResourcesWPF.Company}" />
<ComboBox Name="ComboBox_Company" Grid.Row="0" Grid.Column="1" DisplayMemberPath="Name" SelectedItem="ID" Initialized="ComboBox_Company_Initialized"  SelectionChanged="ComboBox_Company_SelectionChanged" />

<TextBlock Grid.Row="1" Grid.Column="0" Text="{x:Static props:ResourcesWPF.Region}" />
<ComboBox Name="ComboBox_Region" Grid.Row="1" Grid.Column="1" DisplayMemberPath="Name" SelectedItem="ID" Initialized="ComboBox_Region_Initialized" SelectionChanged="ComboBox_Region_SelectionChanged" />
4

2 に答える 2

4

次の変数のいずれかが null です

ComboBox_Company
Region
selected_company
selected_company.ID
ComboBox_Region
regions

シンボルを渡すメソッドでは、nullシンボルが予期されていない可能性があります。

デバッガーを使用して確認できます。例外がスローされると、デバッガーは通常、自動的に起動されます。画面の下部に、2 つの小さなタブがあります。 localswatch。これらを使用して変数の値を確認し、そのうちの 1 つが null かどうかを確認できます。

于 2012-07-16T19:54:23.977 に答える
1

それが本当であるため、その例外が発生しています... NULL である何かにアクセスしています。おそらく、それは selected_company.ID です。

問題のヘルプは次のとおりです。

ComboBox の SelectedValue が変更されるたびに、イベントが複数回発生しています。これには、SelectedValue が古い値から [空] になる場合 (新しい値になる前) が含まれます。これを回避する 1 つの方法は、新しい値が設定されたときにのみロジックが実行されていることを確認することです。ロジックを if にラップします。

if (e.AddedItems.Count > 0)
{
    //your logic
}

ただし、あなたが話していることを達成するためのより良い方法は、SelectionChangedイベント リスナーを使用するのではなく、WPF の {Binding} エンジンを利用することです。2 番目の ComboBox の ItemsSource を 1 番目の ComboBox の SelectedItem のプロパティにバインドします。

于 2012-07-16T19:59:37.047 に答える