簡體   English   中英

根據文本框的輸入更新WPF中的組合框

[英]Update combobox in WPF based on input from textboxes

這應該是一個簡單的任務,但是我似乎無法正確完成...

好的,所以我有一個包含2個textboxes和1個combobox對話框。 combobox具有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)來自模型。 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);
        }
}

請指出我犯的錯誤,並幫助我找到正確的解決方案。 提前致謝。

數據綁定將在這里成為您的救星。 無需實現ListForComboboxItems_CollectionChanged事件,可觀察到的集合與comboboxes項目源的綁定將為您進行排序。

將每個文本框文本屬性綁定到字符串依賴項屬性,然后在屬性通過PropertyChangedCallback更改時修改集合。 或者,您可以查看類似listviewcollection的內容並過濾組合框項目源。

在此站點上瀏覽一下有關如何將可觀察的集合綁定到組合框的許多示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM