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

时间:2014-08-14 20:20:50

标签: c# wpf observablecollection

这应该是一项简单的任务,但我似乎无法做到正确......

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

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

要检测是否已将某些内容写入tbx,我使用TextChanged事件:

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

在codebehind XAML文件中: 值为("", AAA, BBB, CCC)的列表来自模型。 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);
        }
}

请指出我所犯的错误,并帮助我找到正确的解决方案。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

数据绑定非常适合作为你的救星。无需实现ListForComboboxItems_CollectionChanged事件,可观察集合与组合框项目源的绑定将为您排序。

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

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

相关问题