【问题标题】:How to bind the following listboxes depending on the selection of my first combo box如何根据我的第一个组合框的选择绑定以下列表框
【发布时间】:2014-04-13 17:11:11
【问题描述】:

我有 2 个组合框。 (组合 1 和组合 2)
第一个包含 2 个选项。汽车模型和车轮。
第二个包含 4 个选项。宝马、奔驰、4轮、5轮。

如果选择组合框 1 作为车型,我希望第二个组合框的信息仅显示 BMW 和 mercedes,如果选择组合框 1 作为汽车车轮,则仅显示 4 个轮子和 5 个轮子。

我正在寻找一种方法来相应地调用集合但无法。请建议我如何做到这一点。谢谢。

<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);
            }
}

这不起作用,因为我需要单击按钮才能发生这种情况。只要第一个组合框(combo1)有一个选定的选项,我就希望它发生。

当我创建这些列表框项时,它们会自动在一个集合中,因此我相信它们已经以数组的形式存储。我想知道如何访问这个数组,这样我就可以遍历它而不是一个一个地添加。

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

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    首先您应该添加 ComboBoxItem 而不是 ListBoxItem

    第二,您可以在 XAML 中完成所有这些操作,无需使用后面的代码。在资源部分下创建数组并根据第一个组合框中的 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>
    

    如果您仍想在后面的代码中执行此操作,请挂钩 SelectionChanged 事件。

    <ComboBox Name="combo1" Width="120" SelectionChanged="ComboBox_SelectionChanged">
        <ComboBoxItem Name="box1" Content="Car Model"/> 
        <ComboBoxItem Name="box2" Content="Car Wheels"/>
    </ComboBox>
    <ComboBox Name="combo2" Width="120"/>
    

    Code behind

    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");
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-07
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多