Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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# 根据来自文本框的输入更新WPF中的combobox_C#_Wpf_Observablecollection - Fatal编程技术网

C# 根据来自文本框的输入更新WPF中的combobox

C# 根据来自文本框的输入更新WPF中的combobox,c#,wpf,observablecollection,C#,Wpf,Observablecollection,这应该是一个简单的任务,但我似乎不能得到它的权利 好的,这个对话框有两个文本框和一个组合框。组合框有4个可能的值(项目):”、AAA、BBB、CCC 我想要实现的是: 当某些内容写入textbox1(tbx1)时,组合框的可能值必须限制为:”、BBB、CCC。 当某些内容写入textbox2(tbx2)时,组合框的可能值必须限制为:”、AAA、CCC。 如果删除了tbx1和tbx2中的输入,则所有4个值应再次出现在组合框中 为了检测tbx中是否写入了内容,我使用TextChanged事件: Te

这应该是一个简单的任务,但我似乎不能得到它的权利

好的,这个对话框有两个
文本框和一个
组合框。
组合框有4个可能的值(项目):
”、AAA、BBB、CCC

我想要实现的是: 当某些内容写入textbox1(
tbx1
)时,
组合框的可能值必须限制为:
”、BBB、CCC
。 当某些内容写入textbox2(
tbx2
)时,
组合框的可能值必须限制为:
”、AAA、CCC
。 如果删除了
tbx1
tbx2
中的输入,则所有4个值应再次出现在
组合框中

为了检测tbx中是否写入了内容,我使用TextChanged事件:

TextChanged="tbx1_TextChanged" for tbx1
TextChanged="tbx2_TextChanged" for tbx2
在codebehind XAML文件中: 带有值
(“”,AAA,BBB,CCC)
的列表来自该型号<代码>列表
列表。 我包装成一个
可观察集合

ListForComboboxItems= new ObservableCollection<string>(itsVm.list);
        ListForComboboxItems.CollectionChanged += ListForComboboxItems_CollectionChanged;
因此,我所期望的是,
组合框
只更新了3个
(“”,BBB,CCC)
。这种情况不会发生。为什么会这样?这就像是一个事件需要被触发或其他什么

我使用
ObservableCollection
的原因是它有
CollectionChanged
事件,我已经尝试使用该事件,但我一定是在
ListForComboxItems\u CollectionChanged
处理程序中出错了,因为我得到一个错误,该集合已经在使用中

private void ListForComboboxItems_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
        var action = e.Action;
        if (action == NotifyCollectionChangedAction.Remove)
        {
            if (e.OldItems != null)
            {
                foreach (var olditem in e.OldItems)
                {
                    var item = olditem.ToString();
                    this.ComboDropDownBox.Items.SourceCollection.Remove(item);  
                }
            }
        }

        if (action == NotifyCollectionChangedAction.Add)
        {
            this.ComboDropDownBox.Items.Add(e.NewItems);
        }
}
请指出我犯的错误,并帮助我找到正确的解决方案。
提前感谢。

数据绑定将是您的救星。无需实现ListForComboboxItems\u CollectionChanged事件,可观察集合与ComboboxItemsSource的绑定将为您排序

将每个textbox文本属性绑定到字符串依赖项属性,然后在属性通过PropertyChangedCallback更改时修改集合。或者,您可以查看类似listviewcollection的内容并过滤combobox项资源


请在此网站上查看许多如何将可观察集合绑定到组合框的示例。

您确实希望将文本框绑定到您的虚拟机,然后让虚拟机适当地更新组合框的源。
private void ListForComboboxItems_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
        var action = e.Action;
        if (action == NotifyCollectionChangedAction.Remove)
        {
            if (e.OldItems != null)
            {
                foreach (var olditem in e.OldItems)
                {
                    var item = olditem.ToString();
                    this.ComboDropDownBox.Items.SourceCollection.Remove(item);  
                }
            }
        }

        if (action == NotifyCollectionChangedAction.Add)
        {
            this.ComboDropDownBox.Items.Add(e.NewItems);
        }
}