这是前台的xaml代码。
<Label Content="器件编号" HorizontalAlignment="Left" Margin="0,10,0,0" Width="80"/>
                        <TextBox Name="TBX_ComSID" HorizontalAlignment="Left" Margin="80,10,0,0" Width="100" TextChanged="TBX_ComSID_TextChanged"/>
                        <Label Content="一级类目" HorizontalAlignment="Left" Margin="200,10,0,0" Width="60"/>
                        <ComboBox Name="CBX_TypeOne" HorizontalAlignment="Left" SelectedIndex="0" Margin="260,10,0,0" Width="80" SelectionChanged="CBX_TypeOne_SelectionChanged" Loaded="CBX_TypeOne_Loaded"/>
                        <Label Content="二级类目" HorizontalAlignment="Left" Margin="350,10,0,0" Width="60"/>
                        <ComboBox Name="CBX_TypeTwo" HorizontalAlignment="Left" SelectedIndex="0" Margin="410,10,0,0" Width="80" SelectionChanged="CBX_TypeTwo_SelectionChanged" />
                        <Label Content="器件名称:" HorizontalAlignment="Left" Margin="520,10,0,0" Width="60"/>
                        <Label Style="{StaticResource LB_RedStar}" HorizontalAlignment="Left" Margin="565,10,0,0"/>
                        <uc:AutoFilteredComboBox x:Name="AFCB_ComponentName" SelectedIndex="0" HorizontalAlignment="Left" Margin="580,10,0,0" Width="160" SelectionChanged="AFCB_ComponentName_SelectionChanged"/>
                        <Label Content="器件规格" HorizontalAlignment="Left" Margin="780,10,0,0" Width="60"/>
                        <ComboBox Name="CBX_ComStandard" HorizontalAlignment="Left" Margin="840,10,0,0" Width="120"/>后台写的xaml.cs代码
#region  类目、名称、规格
        //通过器件编号获取器件名称和规格
        private void TBX_ComSID_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (_ComponentDal.IsComExistedBySID(TBX_ComSID.Text.Trim()))
            {
                ComDirectory com = _ComponentDal.GetComBySID(TBX_ComSID.Text.Trim()).FirstOrDefault();
                AFCB_ComponentName.SelectedValue = com.Name;
                CBX_ComStandard.SelectedValue = com.Standard;
            }
        }        //类目一
        private void CBX_TypeOne_Loaded(object sender, RoutedEventArgs e)
        {
            List<string> typeOneList = new List<string>();
            typeOneList.Add("全部");
            typeOneList.AddRange(_ClassDal.GetClassNameByLevel(1));
            CBX_TypeOne.ItemsSource = typeOneList;        }        // 类目一
        private void CBX_TypeOne_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            string typeOneName = CBX_TypeOne.SelectedItem.ToString().Trim();
            if (typeOneName == "全部")
            {//控制显示类目二
                List<string> typeTwo = new List<string>();
                typeTwo.Add("全部");
                typeTwo.AddRange(_ClassDal.GetClassNameByLevel(2));
                CBX_TypeTwo.ItemsSource = typeTwo;                //控制显示器件名称
                List<string> nameList = new List<string>();
                nameList.Add("全部");
                nameList.AddRange(_ComponentDal.GetNames());
                AFCB_ComponentName.ItemsSource = nameList;
                AFCB_ComponentName.SelectedIndex = 0;
            }
            else
            {
                List<string> typeTwoList = new List<string>();
                typeTwoList.Add("全部");//通过器件的一级类目获取二级类目
                typeTwoList.AddRange(_ClassDal.GetClassNameByBelongClassName(typeOneName));
                CBX_TypeTwo.ItemsSource = typeTwoList;
                CBX_TypeTwo.SelectedIndex = 0;//当前焦点为0,即没有选中任何项  
                string typeTwoName = CBX_TypeTwo.SelectedItem.ToString().Trim();
                if (typeTwoName == "全部")
                {
                    List<string> nameList = new List<string>();
                    nameList.Add("全部");//通过器件的一级类目获取器件名称
                    nameList.AddRange(_ComponentDal.GetNameByBelongClassName(typeOneName));
                    AFCB_ComponentName.ItemsSource = nameList;
                    AFCB_ComponentName.SelectedIndex = 0;
                }
            }
        }        //类目二
        private void CBX_TypeTwo_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                //数据源发生的变化
                if (CBX_TypeOne.SelectedItem == null) return;  //数据源发生的变化,所以要提前判断一下
                if (CBX_TypeTwo.SelectedItem == null) return;
                string typeOneName = CBX_TypeOne.SelectedItem.ToString().Trim();
                string typeTwoName = CBX_TypeTwo.SelectedItem.ToString().Trim();
                List<string> nameList = new List<string>();
                nameList.Add("全部");
                if ((typeTwoName == "全部") && (typeOneName != "全部"))
                {
                    nameList.AddRange(_ComponentDal.GetNameByBelongClassName(typeOneName.ToString().Trim()));
                    AFCB_ComponentName.ItemsSource = nameList;
                }
                if ((typeOneName == "全部") && (typeTwoName == "全部"))
                {
                    nameList.AddRange(_ComponentDal.GetNames());
                    AFCB_ComponentName.ItemsSource = nameList;
                }
                else if (typeTwoName != "全部")//“全部”需要单独判断,避免覆盖初始化。
                {//通过类目二控制显示器件名称
                    nameList.AddRange(_ComponentDal.GetNameByClassName(typeTwoName));
                    AFCB_ComponentName.ItemsSource = nameList;
                }                AFCB_ComponentName.SelectedIndex = 0;
            }
            catch (Exception cla)
            {
                MessageBox.Show(cla.ToString());
            }
        }
        //器件
        private void AFCB_ComponentName_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (AFCB_ComponentName.SelectedItem == null) return;
            CBX_ComStandard.SelectedIndex = 0;
            string name = AFCB_ComponentName.SelectedItem.ToString().Trim();
            //通过器件名称来控制显示对应器件的规格
            List<string> standardList = new List<string>();
            standardList.Add("全部");
            standardList.AddRange(_ComponentDal.GetComStandard(name));
            CBX_ComStandard.ItemsSource = standardList;
        }
        #endregion
器件名称afcb 是一个过滤的combobox  我想请教下大神们,我这样写感觉有点乱,是可以实现功能。其中的if (CBX_TypeOne.SelectedItem == null) return; 这样我理解成数据源发生了变化会出错,希望大神耐心指导下,感激不尽