Laden...

TabControl - Wie auf Wiederholelemente zugreifen?

Erstellt von weismat vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.299 Views
W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 8 Jahren
TabControl - Wie auf Wiederholelemente zugreifen?

<Window x:Class="Wpf.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="App" Height="350" Width="1065.85" Closing="Window_Closing">
    <Window.Resources>
        <StackPanel x:Key="CommonTabContent">
            <DataGrid HorizontalAlignment="Left"  Margin="0,79,0,0" VerticalAlignment="Top" Name="MyDataGrid" FontSize="16" FontStyle="Normal" FontWeight="Bold"/>
<Button Content="Stop" HorizontalAlignment="Left" Margin="301,20,0,0" VerticalAlignment="Top" Width="75" Click="Stop_Click"/>
        </StackPanel>
    </Window.Resources>

    <Grid>
        <TabControl HorizontalAlignment="Left"
            Height="299"
            Margin="10,10,0,0"
            VerticalAlignment="Top"
            Width="497"
            SelectionChanged="TabControl_SelectionChanged">
            <TabItem Header="1" Content="{StaticResource CommonTabContent}"></TabItem>
            <TabItem Header="2" Content="{StaticResource CommonTabContent}"></TabItem>
            </TabControl>
    </Grid>
</Window>

Ich bin WPF Neuling und versuche ein TabControl mit sich wiederholenden Elementen zu erstellen.
Wie erstelle ich nun das Data-Binding für das sich wiederholende DataGrid und wie weiß ich, welche Tab-Button-Kombination vorliegt - wahrscheinlich muss ich mir jeden Klick merken, oder?

5.299 Beiträge seit 2008
vor 8 Jahren

TabControl ist ein ItemsControl wie Listbox, Combobox, Datagrid etc auch.
Du kannst seine ItemsSource-Property ans Viewmodel binden, und dann vom Viewmodel aus alles steuern, was das TabControl anzeigen soll etc..

Das hab ich jetzt so ins blaue geschrieben, weil tatsächlich weiß ich garnet, was du genau meinst mit "sich wiederholende DataGrid" und "Tab-Button-Kombination".

Der frühe Apfel fängt den Wurm.

W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 8 Jahren

Wie gesagt bin ich WPF Anfänger.
Damit ich die Elemente im XAML nicht wiederhole, habe ich eine Ressource geschrieben, die "CommonTabContent" heisst - diese wird mehrfach in den TabItems benutzt.
Die Ressource finde ich mit

StackPanel stackPanel = (StackPanel)this.FindResource("CommonTabContent"); 

Wie finde ich nun das darunterliegende MyDataGrid, um das Data-Binding zu setzen.
Ohne die Tabs konnte ich einfach MyDataGrid.ItemsSource setzen.

5.299 Beiträge seit 2008
vor 8 Jahren

ich hab den Eindruck, du verstehst garnet, worauf ich hinaus will.
Beschäftige dich mal mittm MVVM-Pattern, und mit DataTemplates.

In Wpf, wenn man viele gleichartige Dinge anzeigt, da macht man nicht viele Items ins Xaml, sondern man hat ein Viewmodel, und darin eine Liste mit vielen Daten.
Und im Xaml hat man ein DataTemplate - nur eines!, und dieses DataTemplate wendet sich selbst auf jedes Daten-Item an, und so entstehen komplexe Oberflächen, mit mw. auch vielen Datagrids.

Versuche zu verstehen, was ich versuche, zu erklären.
Versuche nicht, das nicht verstandene zu ignorieren und einfach weiterzuwursteln (mit vielen Items im Xaml) wie bisher - das ist nicht, wie man vorgeht.

Wenn du magst, kannst du was von mir auf Codeproject angucken :Was mit TabControl (äh - du müsstest es downloaden und ausprobieren)
Nur als Richtung, denn für deinen Fall ist das oversized.
Aber man kann glaub erkennen, wie man in Wpf einen templated tabbed-View bastelt.

Und vlt. zeigt sich ja auch, dasses was ganz anderes ist, als wonach du suchst - auch das wäre ja hilfreich.

Der frühe Apfel fängt den Wurm.

W
weismat Themenstarter:in
872 Beiträge seit 2005
vor 8 Jahren

Danke für dieses gute Beispiel - wie gesagt bin ich WPF-Anfänger und finde das es wenig gute WPF Beispiele gibt - meistens werden Controls erklärt und dann wirds meist schlampig.
Ich werde mich damit weiter beschäftigen und Dir dann später mal konkrete Fragen stellen. Würdest Du für MVVM ein Framework wie Prism oder Caliburn Micro empfehlen oder so wie in Deinem Beispiel bei WPF selbst bleiben.

5.299 Beiträge seit 2008
vor 8 Jahren

Ich selbst hab mein eigenes kleines (mehr oder weniger klein 😉 ) Framework, weil von dem Kram in den üblichen Frameworks bräuchte ich allenfalls das DelegateCommand und die ViewmodelBase.
Beides habich inzwischen selbst und für meine Zwecke besser implementiert, als was ich gelegentlich in dem einen oder anderen Wpf-Framework vorfund.
Und ist eh ganz unausweichlich, dass man sich bei und für die Arbeit mit Wpf das eine oder andere Helferlein zurecht macht, sodass wohl bei jedem Programmierer sukzessive mit der Zeit eine Art eigenes kleine Framework entsteht (ob mans wahrhaben will oder nicht).

Aber als Anfänger - tja, weiß nicht 8)
Da ists einerseits sicherlich gut, Unterstützung einzubinden, bei der man sich drauf verlassen kann, dass sie professionell gemacht ist und millionenfach verwendet wird.

Andererseits ists aber garnet schlecht - auch grad als Anfänger - insbesondere Delegatecommand und ViewmodelBase mal selbst zu implementieren.
Oder zumindest als Source-Code vorliegen zu haben, dass man wirklich im Einzelnen versteht, wie das tickt.
Ich hab jetzt grad nicht parat, welche Version meiner ViewmodelBase dem verlinkten Sample beiliegt - also wenn die gut ist, täte ich fast raten, einfach nur die beiden zu nehmen, und erstmal ohne ein Profi-Bibliotheken-Monster zu gucken, wie weit du kommst.

Allerdings mit Perspektive, gelegentlich ein solches nachzurüsten, nämlich dann, wenn mans braucht.

Der frühe Apfel fängt den Wurm.