我正在開發一個C#中的WPF用戶控件庫。該庫具有用戶交互的表單。該表單有3個組合框(ComboBox1,ComboBox2和ComboBox3)。一旦用戶選擇了組合框1中的項目,那麼組合框2和3將顯示將與用戶選擇一起進行的項目。我有這個設置的方法是:ComboboxItem訪問返回null
XAML:
<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" };
}
採用這種設置,然後我這行,這似乎給我搗亂:
string cmb1TypeString = cmbBox1.SelectedItem.ToString();
當我運行這個cmb1TypeString被設置爲null。但是,當我在調試過程中查看類值時,它顯示它具有正確的值。
在嘗試其他事情時,我從xaml中取出Combobox1的組合框項目的初始化。相反,我把項目的初始化類定義的在InitializeComponent()之後,如下所示:
this.cmbBox1.ItemsSource = new object[] { "Item1", "Item2","Item3"};
隨着這一變化被正確地返回Cmb1TypeString作爲用戶選擇的值。我不知道爲什麼會發生這種情況?如果在xaml中設置了組合框項目和代碼,它們之間有什麼區別?
非常感謝幫助。
我會嘗試你的建議。爲了澄清,在代碼後面我使用了語句'string cmb2TypeString = cmbBox2.SelectedItem.ToString();'這會正確返回用戶選擇的值。cmbBox1和cmbBox2/cmbBox3唯一的區別在於第一個項目是在xaml中初始化的,其中第二個和第三個項目是基於cmbBox1的用戶輸入動態初始化的。 – snkp