在运行时处理列表框内的组合框(XAML、WPF、C#)

ahy6op9u  于 2022-11-18  发布在  C#
关注(0)|答案(1)|浏览(189)

我有一个包含多个项目的列表框。它们在运行时动态添加。
这些项目中的每一个都有一个包含相同项目数的Combobox,这些项目也应该在运行时添加。

<ListBox x:Name="ListBox_Parcels" 
                 ItemsSource="{Binding}"
                 SelectionMode="Multiple"
                 SelectionChanged="ListBox_Parcels_SelectionChanged">
           <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Background="Transparent" Cursor="Hand">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" />
                        </Grid.ColumnDefinitions>
                        <TextBlock x:Name="tb_title"
                                    Grid.Column="0" 
                                    Text="{Binding Name}" />
                        <ComboBox x:Name="Combobox_ParcelPreset"
                                  Grid.Column="1"
                                  SelectionChanged="ComboBox_ParcelPreset_SelectionChanged">
                            <ComboBoxItem Content="initItem1"/>
                            <ComboBoxItem Content="initItem2"/>
                        </ComboBox>
                    </Grid>
            </DataTemplate>
      </ListBox.ItemTemplate>
</ListBox>

现在我想添加一个Item(运行时的yia后台代码)到列表框中的所有ComboBox_ParcelPreset。我想能够设置列表框中特定组合框的选定索引,并且当用户更改组合框的选择时,获取组合框和列表框的索引。
我的问题是,ComboBox_ParcelPreset不存在,ListBox_Parcels没有任何方法访问组合框。

Itemlist_Parcels = new ObservableCollection<ClParcelItem>();
        ListBox_Parcels.DataContext = Itemlist_Parcels;

如果我改变组合框中的选择,我也不会得到列表框的索引。
任何提示都欢迎。

cigdeys3

cigdeys31#

帮助我的是:How to access a specific item in a Listbox with DataTemplate?

for (int i = 0; i< ListBox_Parcels.Items.Count; i++)
            {
                ListBoxItem lbi = (ListBoxItem)ListBox_Parcels.ItemContainerGenerator.ContainerFromIndex(i);
                ComboBox cb = FindDescendant<ComboBox>(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;
                }

            }

相关问题