在运行时处理一个 ListBox 内的 ComboBox(XAML,WPF,C#)
在运行时处理一个 ListBox 内的 ComboBox(XAML,WPF,C#)
我有一个带有多个项的Listbox。这些项在运行时动态添加。
每个项都有一个Combobox,该Combobox应该在运行时添加相同数量的项。
现在我想通过后台代码在ListBox中的所有ComboBox_ParcelPreset中添加一个项。我想能够设置ListBox内特定ComboBox的选定索引,并在用户更改ComboBox的选择时获取ComboBox和ListBox的索引。
我的问题是,ComboBox_ParcelPreset不存在,而ListBox_Parcels没有任何访问ComboBox的方法。
Itemlist_Parcels = new ObservableCollection
ListBox_Parcels.DataContext = Itemlist_Parcels;
如果我在ComboBox中更改选择,也无法获取ListBox的索引。
欢迎任何提示。
问题的出现原因是需要在运行时处理ListBox中的ComboBox。解决方法是使用以下代码:
for (int i = 0; i < ListBox_Parcels.Items.Count; i++) { ListBoxItem lbi = (ListBoxItem)ListBox_Parcels.ItemContainerGenerator.ContainerFromIndex(i); ComboBox cb = FindDescendant(lbi); cb.Items.Add(preset[0]); editing_parcel = (ClParcelItem)ListBox_Parcels.Items[i]; if (ParcelNames.Exists(n => n == editing_parcel.Name)) { cb.SelectedIndex = cb.Items.Count - 1; } }
参考链接:[How to access a specific item in a Listbox with DataTemplate?](https://stackoverflow.com/questions/5181063)
以上代码中,通过循环遍历ListBox中的每个项,获取每个项对应的ListBoxItem,并通过FindDescendant方法找到ListBoxItem中的ComboBox。然后向ComboBox的Items集合中添加preset的第一个元素,并将editing_parcel设置为当前ListBox中的项。最后,如果ParcelNames中存在与editing_parcel的Name相等的项,则将ComboBox的SelectedIndex设置为Items集合的最后一个元素的索引。
该解决方法通过遍历ListBox的每个项,获取每个项对应的ListBoxItem,并通过FindDescendant方法找到ListBoxItem中的ComboBox,实现了在运行时处理ListBox中的ComboBox的功能。