WPF CheckBoxItems in ComboBox - wie CheckState setzen ?



  • Hallo zusammen ...

    Folgendes Problem:

    Eine ComboBox hat folgendes ItemTemplate:

    <DataTemplate x:Key="FachbereichComboItemTemplate">
            	<CheckBox Validation.ErrorTemplate="{x:Null}" x:Name="FachbereichCheckBox" Margin="1" Height="Auto" Width="Auto" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" 
                 Content="{Binding TemplatedParent.Content, ElementName=FachbereichCheckBox}" IsHitTestVisible="True" Checked="FachbereichComboChecked" Unchecked="FachbereichComboUnchecked" DataContext="{Binding Source={StaticResource IInstanzPool}}" />                                                    				                                                    			
    </DataTemplate>
    

    Weiterhin ist diese Combo gebunden an eine ObservableCollection<String> mit bestimmten Stichworten.

    Der Nutzer hat die Möglichkeit einen Katalog zu wechseln, womit sich die vorhandenen Collection nun ändert.

    Vor dem Wechsel wird die bisherige Auswahl (also die Checked == true) in einer zum Katalog gehörigen Liste gespeichert.

    Beim Laden und setzen der vorherigen Auswahl gibt es Probleme:

    switch (mode)
                {
                    case DiskIOoptionsEnum.Load:
                        {
                            localeFachbereiche = new ObservableCollection<String>(DiskIO.loadList(dateiname, DiskIOoptionsEnum.Load));
    
                            //geladene Fachbereich in der Liste Checken                        
                            if (FachbereichComboBox.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated)
                            {
                                List<CheckBox> debuglist= new List<CheckBox>();
    
                                ComboBoxItem item;
                                FrameworkElement element;
                                CheckBox checkBox;
    
                                _manualFachbereichComboChangeFlag = true;
    
                                //foreach (Object sourceItem in localeFachbereiche)
                                foreach (Object sourceItem in FachbereichComboBox.ItemsSource)
                                {
                                    item = FachbereichComboBox.ItemContainerGenerator.ContainerFromItem(sourceItem) as ComboBoxItem;
    
                                    if (item == null) continue;
    
                                    element = item.ContentTemplate.LoadContent() as FrameworkElement;
                                    checkBox = element.FindName("FachbereichCheckBox") as CheckBox;
    
                                    if (localeFachbereiche.Contains(sourceItem.ToString())) checkBox.IsChecked = true;
                                    else checkBox.IsChecked = false;
    
                                    debuglist.Add(checkBox);
    
                                }
    
                                _manualFachbereichComboChangeFlag = false;
    
                            }
    
                            break;
                        }
    

    Die DebugList enthält alle generierten CheckBoxen mit dem richtigen CheckState. Allerdings werden diese CheckStates nicht in der ComboBox gesetzt.

    Ich habe irgendwie das Gefühl, das das mit dem ItemContainerGenerator zusammenhängt, finde aber keinen Ausweg.

    Habt ihr ne Idee ?


  • Administrator

    Muss es denn eine ObservableCollection<string> sein? Kannst du nicht eine ObservableCollection<MyDataViewModel> nehmen, wobei MyDataViewModel in etwa dem ähnelt:

    public class MyDataViewModel
    {
      public string Text { get; set; }
      public bool IsChecked { get; set; }
    }
    

    😉

    Grüssli



  • Nein nein, muss es natürlich nicht. Ich habe denoch einen anderen Weg über einen Multiconverter gewählt.

    Trotzdem würde mich interessieren warum das so ist, da der ItemContainerGenerator noch recht neu für mich ist.


Anmelden zum Antworten