根据文本框的输入更新WPF中的组合框

本文关键字:WPF 组合 更新 输入 文本 | 更新日期: 2023-09-27 18:18:15

这应该是一个简单的任务,但我似乎不能做好…

好的,我有这个对话框,其中有2个textboxes和1个comboboxcombobox有4个可能值(项):"", AAA, BBB, CCC .

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

要检测是否有东西被写入了tbx,我使用TextChanged事件:

TextChanged="tbx1_TextChanged" for tbx1
TextChanged="tbx2_TextChanged" for tbx2

在XAML文件后面的代码:值为("", AAA, BBB, CCC)的列表来自Model。List<string>列表。我用ObservableCollection:

ListForComboboxItems= new ObservableCollection<string>(itsVm.list);
        ListForComboboxItems.CollectionChanged += ListForComboboxItems_CollectionChanged;

tbx1的事件处理程序我有:

    private void tbx_TextChanged(object sender, RoutedEventArgs e)
    {
        if (String.IsNullOrEmpty(tbx1.Text) || String.IsNullOrWhiteSpace(tbx1.Text))
        {
            if (!ListForComboboxItems.Contains("AAA"))
            {
                ListForComboboxItems.Add("AAA");
            }
        }
        else
        {
            if (ListForComboboxItems.Contains("AAA"))
            {
                ListForComboboxItems.Remove("AAA");
            }
        }
    }

所以我期望的是combobox只更新了3个("", BBB, CCC)。这是不会发生的。为什么会这样?这就像一个事件需要被触发之类的。

我使用ObservableCollection的原因是它有CollectionChanged事件,我已经尝试使用,但我必须在ListForComboboxItems_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);
        }
}
请指出我所犯的错误,并帮助我找到正确的解决方案。

根据文本框的输入更新WPF中的组合框

数据绑定将成为您的救星。不需要实现ListForComboboxItems_CollectionChanged事件,将可观察集合绑定到comboboxitemssource将为你排序。

将每个文本框的文本属性绑定到一个字符串依赖属性,然后当属性通过PropertyChangedCallback发生变化时修改集合。或者,您可以查看类似listviewcollection的东西,并过滤组合框itemssource。

看看这个网站上有很多关于如何将可观察集合绑定到组合框的例子