Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何根据我的第一个组合框的选择绑定以下列表框_C#_Wpf_Xaml - Fatal编程技术网

C# 如何根据我的第一个组合框的选择绑定以下列表框

C# 如何根据我的第一个组合框的选择绑定以下列表框,c#,wpf,xaml,C#,Wpf,Xaml,我有两个组合框。(组合1和组合2) 第一个包含两个选项。车型和车轮。 第二个包含4个选项。宝马,奔驰,四轮,五轮 我希望第二个组合框的信息仅显示宝马和梅赛德斯(如果组合框1被选为车型),并且仅显示4个车轮和5个车轮(如果组合框1被选为车轮) 我正在寻找一种方法来调用收集相应的,但无法。请告诉我怎么做。谢谢 <ComboBox Name="combo1" Width="120"> <ListBoxItem Name="box1" Content="

我有两个组合框。(组合1和组合2)
第一个包含两个选项。车型和车轮。
第二个包含4个选项。宝马,奔驰,四轮,五轮

我希望第二个组合框的信息仅显示宝马和梅赛德斯(如果组合框1被选为车型),并且仅显示4个车轮和5个车轮(如果组合框1被选为车轮)

我正在寻找一种方法来调用收集相应的,但无法。请告诉我怎么做。谢谢

<ComboBox Name="combo1" Width="120">
                <ListBoxItem Name="box1" Content="Car Model"/> 
                <ListBoxItem Name="box2" Content="Car Wheels"/>
            </ComboBox>

<ComboBox Name="combo2" Width="120">
                <ListBoxItem Name="box3" Content="BMW"/> 
                <ListBoxItem Name="box4" Content="Mercedes"/>
                <ListBoxItem Name="box5" Content="4 Wheels"/> 
                <ListBoxItem Name="box6" Content="5 Wheels"/>
            </ComboBox>


private void Button_Click(object sender, RoutedEventArgs e)
{
    if (comboBox1.Text == "Car Model")
            {
                comboBox2.Items.Clear();
                comboBox2.Items.Add(box3);
                comboBox2.Items.Add(box4);
            }
            else
            {
                comboBox2.Items.Clear();
                comboBox2.Items.Add(box5);
                comboBox2.Items.Add(box6);
            }
}

私有无效按钮\u单击(对象发送者,路由目标e)
{
如果(comboBox1.Text==“车型”)
{
comboBox2.Items.Clear();
组合框2.Items.Add(框3);
组合框2.Items.Add(框4);
}
其他的
{
comboBox2.Items.Clear();
组合框2.Items.Add(框5);
组合框2.Items.Add(框6);
}
}
这不起作用,因为我需要单击按钮才能实现。只要第一个组合框(combo1)有一个选中的选项,我就希望它发生

此外,当我创建时,这些listboxitems会自动存储在一个集合中,因此我相信它们已经以数组的形式存储。我想知道如何访问这个数组,这样我就可以循环使用它,而不是逐个添加


请建议我如何做这些。谢谢

首先您应该添加
组合框项目
,而不是
列表框项目

<ComboBox Name="combo1" Width="120">
                <ListBoxItem Name="box1" Content="Car Model"/> 
                <ListBoxItem Name="box2" Content="Car Wheels"/>
            </ComboBox>

<ComboBox Name="combo2" Width="120">
                <ListBoxItem Name="box3" Content="BMW"/> 
                <ListBoxItem Name="box4" Content="Mercedes"/>
                <ListBoxItem Name="box5" Content="4 Wheels"/> 
                <ListBoxItem Name="box6" Content="5 Wheels"/>
            </ComboBox>


private void Button_Click(object sender, RoutedEventArgs e)
{
    if (comboBox1.Text == "Car Model")
            {
                comboBox2.Items.Clear();
                comboBox2.Items.Add(box3);
                comboBox2.Items.Add(box4);
            }
            else
            {
                comboBox2.Items.Clear();
                comboBox2.Items.Add(box5);
                comboBox2.Items.Add(box6);
            }
}
其次,您可以在XAML中完成所有这些,无需使用代码隐藏。在resource部分下创建数组,并根据第一个组合框中的SelectedItem设置ItemsSource。以下是您如何以XAML方式进行操作:

<StackPanel>
    <StackPanel.Resources>
        <x:Array Type="ComboBoxItem" x:Key="ModelsArray">
            <ComboBoxItem Name="box3" Content="BMW"/>
            <ComboBoxItem Name="box4" Content="Mercedes"/>
        </x:Array>
        <x:Array Type="ComboBoxItem" x:Key="WheelsArray">
            <ComboBoxItem Name="box5" Content="4 Wheels"/>
            <ComboBoxItem Name="box6" Content="5 Wheels"/>
        </x:Array>
    </StackPanel.Resources>
    <ComboBox Name="combo1" Width="120">
        <ComboBoxItem Name="box1" Content="Car Model"/>
        <ComboBoxItem Name="box2" Content="Car Wheels"/>
    </ComboBox>

    <ComboBox Name="combo2" Width="120">
        <ComboBox.Style>
            <Style TargetType="ComboBox">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding SelectedItem.Content, 
                                        ElementName=combo1}" Value="Car Model">
                        <Setter Property="ItemsSource"
                                Value="{StaticResource ModelsArray}"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding SelectedItem.Content, 
                                       ElementName=combo1}" Value="Car Wheels">
                        <Setter Property="ItemsSource"
                                Value="{StaticResource WheelsArray}"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ComboBox.Style>
    </ComboBox>
</StackPanel>
代码隐藏

private void ComboBox_SelectionChanged(object sender,
                                       SelectionChangedEventArgs e)
{
   if (((ComboBoxItem)combo1.SelectedItem).Content.ToString() == "Car Model")
   {
      combo2.Items.Clear();
      combo2.Items.Add("BMW");
      combo2.Items.Add("Mercedes");
   }
   else
   {
      combo2.Items.Clear();
      combo2.Items.Add("4 Wheels");
      combo2.Items.Add("5 Wheels");
   }
}