私はC#でWPFユーザーコントロールライブラリを開発しています。ライブラリには、ユーザーが対話するフォームがあります。フォームには3つのコンボボックス(ComboBox1、ComboBox2、ComboBox3)があります。ユーザーがcombobox1でアイテムを選択すると、コンボボックス2と3は、ユーザーの選択と一緒に行くアイテムを表示します。私は、このセットアップを持っている方法は次のとおりです。ComboboxItemアクセスがnullを返す
XAML:
string cmb1TypeString = cmbBox1.SelectedItem.ToString();
:この設定で
<ComboBox Grid.Column="1" Grid.ColumnSpan="2" x:Name="cmbBox_TubeType_SlabUserCtrl" Height="auto" SelectionChanged="cmbBox1_SelectedIndexChanged" x:FieldModifier="public">
<ComboBoxItem>Item1</ComboBoxItem>
<ComboBoxItem>Item2</ComboBoxItem>
<ComboBoxItem>Item3</ComboBoxItem>
</ComboBox>
C#
if (this.cmbBox1.SelectedIndex == 0)
{
this.cmbBox2.ItemsSource = new object[] { "B01", "B02" };
this.cmbBox3.ItemsSource = new object[] { "J01", "J22" };
}
else if (this.cmbBox1.SelectedIndex == 1)
{
this.cmbBox2.ItemsSource = new object[] { "B21", "B22" };
this.cmbBox3.ItemsSource = new object[] { "J21", "J32" };
}
else if (this.cmbBox1.SelectedIndex == 2)
{
this.cmbBox2.ItemsSource = new object[] { "B31", "B32" };
this.cmbBox3.ItemsSource = new object[] { "J21", "J32" };
}
、私はその後、私に迷惑を与えるようで、このラインを持っています
これを実行すると、cmb1TypeStringはnullとして設定されます。しかし、デバッグ中にクラスの値を調べると、正しい値を持つように見えます。
他のことを試しながら、xamlからCombobox1のコンボボックス項目の初期化を取り出しました。 Cmb1TypeStringは、ユーザが選択した値として正しく返されます。この変更に伴い
this.cmbBox1.ItemsSource = new object[] { "Item1", "Item2","Item3"};
を次のように代わりに私は、クラス定義の)右のInitializeComponent(後のアイテムの初期化を置きます。なぜこれが起きているのか分かりません。コンボボックスの項目がxamlとコードで設定されている場合、コンボボックスの項目の扱いに違いはありますか?
お願いします。
私はあなたの提案をしようとします:あなたはあなたのSelectionChangedイベントハンドラでそれらにアクセスしようとする前に、必ず要素が実際に初期化されていることを確認すべき理由
がそれです。明確にするために、コードの後半で私は 'string cmb2TypeString = cmbBox2.SelectedItem.ToString();'というステートメントを使用します。これにより、ユーザーが選択した値が正しく返されます。cmbBox1とcmbBox2/cmbBox3の唯一の違いは、最初のアイテムがxamlで初期化され、2番目と3番目のアイテムがcmbBox1のユーザー入力に基づいて動的に初期化される点です。 – snkp