如何使用C#删除Wpf组合框项

时间:2012-11-23 08:52:12

标签: c# wpf combobox

我有3个具有相同3项(a,b,c)的组合框。如果我在组合框1中选择“a”,则“a”将从组合框2中移除,留在组合框2中的项目将是“b”& “C”。然后我在combobox2中选择“b”,“b”将从combobox3中删除,而combobox3中的项目将是“a”& “C”。 如果前一个组合框通过selectionChanged,则删除的项目将再次恢复到组合框中。我尝试了一些我在互联网上找到的代码,但是没有用...来自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 个答案:

答案 0 :(得分:1)

我想问题是那些实际上是不同的ComboBoxItem个实例。它们具有相同的文本,但它们仍然是不同的实例。因此,SelectionBoxItem中的secondCombo thirdCombo.Items将无法在{{1}}中找到,因此不会被删除。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

也许这就是说。

String strCombo1 = comboBox1.SelectedItem.ToString(); 
comboBox2.Items.Remove(strCombo1);

答案 3 :(得分: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