0

我有 3 个具有相同 3 个项目(a、b、c)的组合框。如果我在combobox1中选择“a”,“a”将从combobox2中删除,留在combobox2中的项目将是“b”和“c”。然后我在combobox2中选择“b”,“b”将从combobox3中删除,combobox3中的项目将是“a”和“c”。如果前一个组合框通过 selectionChanged,则删除的项目将再次恢复到组合框中。我尝试了一些在 Internet 上找到的代码,但不起作用...从 previos 组合框中选定的项目没有被删除。

我的组合框代码:

<ComboBox Name="firstCombo" SelectionChanged="firstCombo_SelectionChanged">
    <ComboBoxItem Content="A"></ComboBoxItem>
    <ComboBoxItem Content="B"></ComboBoxItem>
    <ComboBoxItem Content="C"></ComboBoxItem>
</ComboBox>

<ComboBox Name="secondCombo" SelectionChanged="secondCombo_SelectionChanged">
    <ComboBoxItem Content="A"></ComboBoxItem>
    <ComboBoxItem Content="B"></ComboBoxItem>
    <ComboBoxItem Content="C"></ComboBoxItem>
</ComboBox>

<ComboBox Name="thirdCombo" >
    <ComboBoxItem Content="A"></ComboBoxItem>
    <ComboBoxItem Content="B"></ComboBoxItem>
    <ComboBoxItem Content="C"></ComboBoxItem>
</ComboBox>

我的 C# 代码:

private void firstCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    secondCombo.Items.Remove(firstCombo.SelectionBoxItem);         
}

private void secondCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    thirdCombo.Items.Remove(secondCombo.SelectionBoxItem);         
}
4

4 回答 4

1

我想问题是这些实际上是不同的ComboBoxItem实例。它们具有相同的文本,但它们仍然是不同的实例。因此,SelectionBoxItemfromsecondCombo不会被找到thirdCombo.Items,因此它不会被删除。

您需要根据显示的文本将其删除。

于 2012-11-23T08:58:44.277 回答
0

您可以使用 SelectedIndex 删除它,但如果您之前删除过某些内容,请注意它,因为如果您已经删除它,那么索引就不一样了:

private void firstCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    secondCombo.Items.RemoveAt(firstCombo.SelectedIndex);         
}
于 2012-11-23T08:59:56.870 回答
0

您可以只更改单个项目的可见性,而不是添加和删除项目。

如果您在 XAML 中绑定它(通过转换器),“删除”和“读取”将自动发生。

<ComboBox Name="firstCombo">
    <ComboBoxItem Content="A"></ComboBoxItem>
    <ComboBoxItem Content="B"></ComboBoxItem>
    <ComboBoxItem Content="C"></ComboBoxItem>
</ComboBox>

<ComboBox Name="secondCombo">
    <ComboBoxItem Content="A"
                  Visiblity="{Binding ElementName=firstCombo Path=SelectedIndex,
                              Converter=IndexToVisibiltyConverter,
                              ConverterParameter=A></ComboBoxItem>
    <ComboBoxItem Content="B"
                  Visiblity="{Binding ElementName=firstCombo Path=SelectedIndex,
                              Converter=IndexToVisibiltyConverter,
                              ConverterParameter=B></ComboBoxItem>
    <ComboBoxItem Content="C"
                  Visiblity="{Binding ElementName=firstCombo Path=SelectedIndex,
                              Converter=IndexToVisibiltyConverter,
                              ConverterParameter=C></ComboBoxItem>
</ComboBox>

<ComboBox Name="thirdCombo">
    <ComboBoxItem Content="A"
                  Visiblity="{Binding ElementName=secondCombo Path=SelectedIndex,
                              Converter=IndexToVisibiltyConverter,
                              ConverterParameter=A></ComboBoxItem>
    <ComboBoxItem Content="B"
                  Visiblity="{Binding ElementName=secondCombo Path=SelectedIndex,
                              Converter=IndexToVisibiltyConverter,
                              ConverterParameter=B></ComboBoxItem>
    <ComboBoxItem Content="C"
                  Visiblity="{Binding ElementName=secondCombo Path=SelectedIndex,
                              Converter=IndexToVisibiltyConverter,
                              ConverterParameter=C></ComboBoxItem>
</ComboBox>

*注意:转换器定义不是合法的语法 - 仅供说明!

您可以绑定到显示的文本或选定的值 - 任何最方便的。

转换器将根据参数检查索引/文本/值并根据需要返回Visibility.VisibleVisibility.Collapsed

于 2012-11-23T09:24:04.587 回答
0

也就是说,也许。

String strCombo1 = comboBox1.SelectedItem.ToString(); 
comboBox2.Items.Remove(strCombo1);
于 2012-11-23T09:09:28.340 回答