簡體   English   中英

如何根據我的第一個組合框的選擇綁定以下列表框

[英]How to bind the following listboxes depending on the selection of my first combo box

我有2個組合框。 (combo1和combo2)
第一個包含2個選項。 汽車模型和車輪。
第二個包含4個選項。 寶馬,奔馳,4輪,5輪。

我希望第二個組合框的信息僅在選擇組合框1作為汽車模型時顯示BMW和奔馳,而在選擇組合框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);
            }
}

這不起作用,因為我需要單擊按鈕才能發生這種情況。 我希望只要第一個combobox(combo1)具有選定的選項,它就會發生。

這些列表框項目在創建時也會自動保存在集合中,因此我相信它們已經以數組形式存儲。 我想知道如何訪問此數組,以便可以遍歷該數組,而不是一個接一個地添加。

請建議我該怎么做。 謝謝。

首先 ,您應該添加ComboBoxItem而不是ListBoxItem

其次 ,您可以在XAML中完成所有這些操作,而無需使用后面的代碼。 在資源部分下創建數組,並在第一個comboBox中基於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");
   }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM