![](/img/trans.png)
[英]Programmatically Set Data Binding in WPF for Dynamic TextBoxes from a Dynamic ComboBox
[英]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
。 如果同時刪除了tbx1
和tbx2
輸入,則所有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.