ItemContainerGenerator.ContainerFromItem() returns null while VirtualizingStackPanel.IsVirtualizing="False"

c#, combobox, itemcontainergenerator, null, wpf

Solution

try execute `UpdateLayout()` before `this.ItemContainerGenerator.ContainerFromItem(item)`

Problem

I'm facing a similar problem with this question however `VirtualizingStackPanel.IsVirtualizing="False"` didn't solve my problem. Is there anyone facing the same issue? The thing is I have a custom combobox, ``` <Style TargetType="{x:Type MultiSelectionComboBox}" > <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <StackPanel Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center" VirtualizingStackPanel.IsVirtualizing="False"/> </ItemsPanelTemplate> </Setter.Value> </Setter> <Setter Property="ItemTemplate"> <Setter.Value> <DataTemplate> <StackPanel Orientation="Horizontal" x:Name="ItemStack" VirtualizingStackPanel.IsVirtualizing="False"> <CheckBox x:Name="CheckBoxItem" Command="{Binding SelectItem, RelativeSource={RelativeSource AncestorType={x:Type MultiSelectionComboBox}}}" CommandParameter="{Binding Key}" > </CheckBox> <TextBlock Text="{Binding DisplayText}"></TextBlock> </StackPanel> </DataTemplate> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type ComboBox}"> <Grid x:Name="Placement" SnapsToDevicePixels="true"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> <ColumnDefinition Width="Auto"/> </Grid.ColumnDefinitions> <Border BorderThickness="1" BorderBrush="Black"> <TextBox IsReadOnly="True" Grid.Column="0" Text="{Binding Text, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType={x:Type MultiSelectionComboBox}}}"> </TextBox> </Border> <Popup x:Name="PART_Popup" Grid.Column="0" Focusable="False" Grid.ColumnSpan="2" IsOpen="{Binding IsDropDownOpen, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}" Placement="Bottom" VerticalOffset="-1" PlacementTarget="{Binding ElementName=LayoutRoot}"> <Popup.Resources> <Style TargetType="{x:Type ScrollBar}" BasedOn="{StaticResource {x:Type ScrollBar}}"> <Style.Triggers> <Trigger Property="Orientation" Value="Vertical"> <Setter Property="BorderThickness" Value="0"/> </Trigger> </Style.Triggers> </Style> </Popup.Resources> <ScrollViewer x:Name="DropDownScrollViewer" Background="{StaticResource Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" MinWidth="{Binding ActualWidth, ElementName=LayoutRoot}" MaxHeight="{TemplateBinding MaxDropDownHeight}"> <ItemsPresenter KeyboardNavigation.DirectionalNavigation="Contained"/> </ScrollViewer> </Popup> <ToggleButton IsEnabled="{Binding IsEnabled, UpdateSourceTrigger=PropertyChanged, RelativeSource={RelativeSource AncestorType={x:Type MultiSelectionComboBox}}}" Grid.Column="1" IsChecked="{Binding IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ComboBoxToggleButton}"/> </Grid> </ControlTemplate> </Setter.Value> </Setter> </Style> </ResourceDictionary> ``` and yet I can't get a reference to the checkbox inside via, ``` this.ItemContainerGenerator.ContainerFromItem(this.Items[0]) as ComboBoxItem; ``` Is there any suggestions? What i actually want to achieve is, i want to change checkboxes ischecked property which is depending on an other object which can change on runtime. I can't do it with using bindings due to the current state of the overall project which i can not change at this point. So basically once the new MultiSelectionComboBox is created i want to do something like this, ``` foreach (object item in this.Items) { ComboBoxItem comboBoxItem = this.ItemContainerGenerator.ContainerFromItem(item) as ComboBoxItem; if (comboBoxItem == null) continue; FrameworkElement element = comboBoxItem.ContentTemplate.LoadContent() as FrameworkElement; CheckBox checkBox = element.FindName("CheckBoxItem") as CheckBox; checkBox.IsChecked = this.SelectedItem.Contains(item); } ```

Original source

Related problems