Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.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

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组合框项_C#_Wpf_Combobox - Fatal编程技术网

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

C# 如何使用C删除Wpf组合框项,c#,wpf,combobox,C#,Wpf,Combobox,我有3个组合框,有3个相同的项目a,b,c。如果我在combobox1中选择a,a将从Combox2中删除,留在Combox2中的项目将是b&c。然后我在combobox2中选择b,b将从Combox3中删除,combobox3中的项目将是a&c。 如果选择的前一个组合框已更改,则删除的项目将再次恢复到组合框中。我尝试了在internet上找到的一些代码,但不起作用…从previos组合框中选择的项目未被删除 组合框的我的代码: 我的C代码: private void firstCombo_Se

我有3个组合框,有3个相同的项目a,b,c。如果我在combobox1中选择a,a将从Combox2中删除,留在Combox2中的项目将是b&c。然后我在combobox2中选择b,b将从Combox3中删除,combobox3中的项目将是a&c。 如果选择的前一个组合框已更改,则删除的项目将再次恢复到组合框中。我尝试了在internet上找到的一些代码,但不起作用…从previos组合框中选择的项目未被删除

组合框的我的代码:

我的C代码:

private void firstCombo_SelectionChangedobject发件人,SelectionChangedEventArgs e { secondCombo.Items.RemovefirstCombo.SelectionBoxItem; } private void secondCombo_SelectionChangedobject发件人,SelectionChangedEventArgs e { 第三个mbo.Items.removesecondmbo.SelectionBoxItem; }
我想问题是这些实际上是不同的ComboBoxItem实例。它们有相同的文本,但仍然是不同的实例。因此,secondCombo中的SelectionBoxItem将不会在thirdCombo.Items中找到,因此它不会被删除


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

您可以使用SelectedIndex将其删除,但如果您以前删除过或没有删除过某个内容,请注意它,因为如果您已删除该内容,则索引不相同:

private void firstCombo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    secondCombo.Items.RemoveAt(firstCombo.SelectedIndex);         
}
也许可以这么说

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

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

如果通过转换器将其绑定到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.Visible或Visibility.Collapsed(可视性或可视性)。如果合适,会返回什么错误?如果所有项目都已逐渐从组合框中删除,该怎么办?还有什么要留下的吗?你如何继续你的程序?不工作不是错误描述。怎么了?对不起……我忘了写错误了。我已经更新了这个问题。请再看一看。谢谢。对于任何潜在的回答者,请注意OP增加了一个要求,即当选择发生变化时,未选择的项目将被放回后续的组合框中。这是行不通的。在示例中,从第二个组合框中删除A后,B将具有索引0。这反过来将从第三个组合框中删除A而不是B。那么我如何才能做到这一点呢?很抱歉,回复太晚……我在编译文件时出现了两个错误。内部异常:从数字进行强制转换时,该值必须小于无穷大。内部异常:确保源类型可转换为目标类型。@0070-我说过转换器语法只是说明性的!