我正在开发一个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