Laden...

Selection Mode Extended Listbox in Listbox

Erstellt von Hydrogencarbonat vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.090 Views
H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren
Selection Mode Extended Listbox in Listbox

Hi Leute,

ich habe folgendes Model und benutze WPF mit MVVM.

Ich habe eine ParentListe in der eine SubListe implementiert ist.
Am Ende wird im View quasi eine ListBox, mit einem ItemTemplate in der noch eine Listbox vorhanden ist,angezeigt
Wenn die ParentListbox nun mit ItemsSource befüllt wird dann hat die SubListbox mindestens 3 Elemente.

Wenn ich zum Beispiel nur eine ListBox (ohne ein Liste in dem Model) habe dann kann ich über die Property SelectionMode = "Extended" wunderbar verwenden.

Aber ich möchte eine Selection haben, die sich nur auf die SubElemente bezieht.
Bis jetzt kann nur in der SubListBox selektieren in der ich gerade der Mauszeiger ist.

Wie mache ich es, dass die SubListboxen als ganze Liste gesehen werden und man mit denen den SelectionMode = "Extended" ausführen kann?


public class MainModel
        {
            public int? Index { get; set; }            
            public List<SubModel> SubModels{ get; set; }
        }

        public class SubModel
        {
            public int? Index { get; set; }       
            public string Type1 { get; set; }
            public string Type2 { get; set; }           
        }

 private ObservableCollection<MainModel> _parentCollection = new ObservableCollection<MainModel>();
        public ObservableCollection<MainModel> ParentCollection 
        {
            get { return _parentCollection ; }
            set
            {
                _parentCollection = value;
                OnPropertyChanged(() => ParentCollection);
            }
        }


  private MainModel_selectedParent= new MainModel();
        public MainModelSelectedParent
        {
            get { return _selectedParent; }
            set
            {
                _selectedParent= value;
                OnPropertyChanged(() => SelectedParent);
            }
        }


  private SubModel _selectedSubModel= new SubModel();
        public SubModel SelectedSubModel
        {
            get { return _selectedSubModel; }
            set
            {
                _selectedSubModel= value;
                OnPropertyChanged(() => SelectedSubModel);
            }
        }



<ListBox             ItemsSource="{Binding ParentCollection ,UpdateSourceTrigger=PropertyChanged}" 
                                 SelectedItem="{Binding SelectedParent,UpdateSourceTrigger=PropertyChanged}"
                                 Style="{StaticResource ListBoxStyleV1}"                                
                                 ItemContainerStyle="{StaticResource ListBoxItemStyleV1}"                                 
                                 ItemTemplate="{StaticResource TemplateV1}">           
            </ListBox>



<DataTemplate x:Key="TemplateV1" >
        <Grid Background="Transparent"  HorizontalAlignment="Stretch" VerticalAlignment="Center" Height="Auto" Margin="3,0,3,0" >  
            <Border Margin="2.2" Style="{StaticResource BorderStyleV2}">
                <ListBox         VerticalAlignment="Center" VerticalContentAlignment="Center" HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch"
                                 Width="Auto" Height="Auto"  Background="WhiteSmoke" Margin="0,0,0,0"
                                 ItemsSource="{Binding SubModel}"      
                                 SelectedItem="{Binding DataContext.SelectedSubModel, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Blabla}}}"
                                 Style="{StaticResource ListBoxStyleV2}"                                
                                 ItemContainerStyle="{StaticResource ListBoxItemStyleV2}"                                    
                                 ItemTemplate="{StaticResourceTemplateV2}">
                </ListBox>
            </Border>
        </Grid>
    </DataTemplate>

5.657 Beiträge seit 2006
vor 4 Jahren

Ein TreeView ist besser geeignet, um hierarchische Daten darzustellen. Dann kannst du ein HierarchicalDataTemplate verwenden, um die Daten zu binden.

Weeks of programming can save you hours of planning

H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren

Hi,
vielen Dank für deine Antwort.
Ein TreeView ist vielleicht besser geeignet, aber damit kann ich meine Vorgaben zum View nicht so gestalten wie mit einer ListBox.

Wie ist denn möglich, dass die SubListboxen als ganze Liste gesehen werden und man mit denen den SelectionMode = "Extended" ausführen kann?
Unabhängig von der ParentListBox. Am besten man hat gar kein SelectedItem in der ParentListBox, sondern nur in den SubListboxen.

Gruß

5.657 Beiträge seit 2006
vor 4 Jahren

Was willst du denn genau erreichen? Du kannst ja z.B. verhindern, daß die Einträge in der ersten Ebene selektiert werden können. Und die Mehrfach-Selektion geht auch mit dem TreeView.

Aber mit verschachtelten ListBoxen wirst du nicht zum Ziel kommen.

Weeks of programming can save you hours of planning

H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren

Was ich genau erreichen will sieht so aus. Habe ich auch schon in Code umgesetzt. Nur die SubListBox selection fehlt...
Jedoch möchte ich wie schon geschrieben , das die Elemente von den SubListen quasi als eine Liste gelten und ich somit selektieren kann.

Geht das denn irgendwie ? Muss ich SelectionMode = "Extended" dafür selber nachbauen ?
Das würde sich aber als sehr aufwendig herausstellen... Die unteren Keyboard Modis bräuchte ich ja denn dafür hmm...




                if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
                {
                }
                if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift))
                {
                }


Hinweis von MrSparkle vor 4 Jahren

Link auf Filehoster entfernt.
Bitte beachte [Hinweis] Wie poste ich richtig?, Punkt 6.1 Bilder als Dateianhang hochladen

H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren

Ok, das Bild ist nun richtig angehängt

5.657 Beiträge seit 2006
vor 4 Jahren

Du kannst den TreeView auch so stylen, daß die Inhalte nebeneinander statt untereinander dargestellt werden. Das wäre einfacher, als die Funktionalität des TreeViews nachzubauen.

Weeks of programming can save you hours of planning

H
Hydrogencarbonat Themenstarter:in
42 Beiträge seit 2018
vor 4 Jahren

Ok, vielen Dank.
Ich werde es dann mit dem TreeView umsetzen.

Beste Grüße