在运行时处理一个 ListBox 内的 ComboBox(XAML,WPF,C#)

15 浏览
0 Comments

在运行时处理一个 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的索引。

欢迎任何提示。

0
0 Comments

问题的出现原因是需要在运行时处理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的功能。

0