Laden...

Eine Listbox in mehreren TabItems & Name der Listbox gleich

Erstellt von C#Gustl vor 6 Jahren Letzter Beitrag vor 6 Jahren 1.436 Views
C
C#Gustl Themenstarter:in
36 Beiträge seit 2012
vor 6 Jahren
Eine Listbox in mehreren TabItems & Name der Listbox gleich

Hallo zusammen,

ich möchte in 3 TabItems ein und die selbe ListBox zur Auswahl haben, ItemsSource kann ich ja an eine Liste binden, aber ich muss immer einen anderen Namen vergeben.


<TabControl>
   <TabItem>
       <TabItem.Header>
               ...
       </TabItem.Header>
        <ListBox x:Name="lst_A" ItemsSource="{Binding Layouts}" />
   </TabItem>
   <TabItem>
       <TabItem.Header>
               ...
       </TabItem.Header>
        <ListBox x:Name="lst_B" ItemsSource="{Binding Layouts}" />
   </TabItem>
   <TabItem>
       <TabItem.Header>
               ...
       </TabItem.Header>
        <ListBox x:Name="lst_C" ItemsSource="{Binding Layouts}" />
   </TabItem>
</TabControl>

Wie bekomme ich es hin das es eine Liste wäre die unter jedem TabItem sichtbar ist?
(Damit der Name der Listbox gleich bleiben kann)

Geht das?

Danke schon mal.

Gruß,
Gustl

W
955 Beiträge seit 2010
vor 6 Jahren

Kannst du nicht einfach auf das TabControl verzichten bzw. die Liste ausserhalb anzeigen?

C
C#Gustl Themenstarter:in
36 Beiträge seit 2012
vor 6 Jahren

Das würde gehen, wäre aber unschön, da es auch noch zwei andere Reiter gibt wo ich die Liste eben nicht brauche...

Wenn das so nicht geht dann muss ich bei einem TabWechsel die Selektion gleich halten.
Ist halt auch unschön da ich den Code von der Liste 3x drin habe.

301 Beiträge seit 2009
vor 6 Jahren

Du könntest hier mit einem DataTemplate arbeiten und in dein an dein TabControl eine Liste von ViewModels binden. Jedes der ViewModels stellt dann in sich über ein DataTemplate eine von dir definierte Listenansicht dar und enthält auch die Liste von Items die im DataTemplate an deine visuelle Liste gebunden wird.

Den Headernamen des Tabs kannst du ebenfalls aus dem ViewModel auslesen.

Hier ein snippet


 <TabControl
        ItemsSource="{Binding DetailsViewModels, Mode=OneWay}">
        <TabControl.ItemTemplate>
            <DataTemplate DataType="{x:Type local:DetailViewModel}">
                <ListBox ItemsSource="{Binding Layouts}" />
            </DataTemplate>
        </TabControl.ItemTemplate>
        <TabControl.ItemContainerStyle>
            <Style TargetType="TabItem">
                <Setter Property="Header" Value="{Binding DisplayTitle}" />
            </Style>
        </TabControl.ItemContainerStyle>
    </TabControl>

Falls du noch weitere Tabs hast in denen anderes Zeug dargestellt werden muss so müsstest du einen DataTemplateSelector verwenden und pro unterschiedlichem ViewModelTyp dann ein eigenes DataTemplate schreiben.