Tabcontrol und MVVM



  • So jetzt melde ich mich auch mal wieder. An den Feiertagen arbeite ich nicht :-).

    In dem Buch von Thomas Claudius Huber ist das MVVM auch nur angeschnnitten.

    Aber nochmals zu meinem Thema. Wenn ich also das ganze mit einem TreeView mache kann ich für jede Ebene ein eigenes DataTemplate anlegen und das eventuell auch jedes für sich in einer Datei?


  • Administrator

    David W schrieb:

    (Ob MVVM dabei ist weiß ich allerdings nicht ^^)

    Zumindest in einem Vorgänger davon, wurde es nicht mal am Rande erwähnt. Das Buch ist aber trotzdem recht gut, man muss sich einfach unbedingt noch Informationen zu MVVM beschaffen. Wie z.B. von da:
    http://msdn.microsoft.com/en-us/magazine/dd419663.aspx
    http://msdn.microsoft.com/en-us/library/gg430857.aspx
    http://msdn.microsoft.com/en-us/library/gg430869.aspx

    Grüssli



  • Noch ne Frage zu HiraricalDataTemplates. Habe bei Codeproject einiges Dazu gefunden dass mir schon mal viel geholfen hat.

    Hier mal ein kleiner Ausschnitt was ich gemacht habe

    <TreeView.Resources>
        <HierarchicalDataTemplate 
           DataType="{x:Type local:ViewModel1}" 
           ItemsSource="{Binding Liste}">
           <!-- Controlls mit Binding zu den Daten-->
        </HierarchicalDataTemplate>
    
        <HierarchicalDataTemplate 
           DataType="{x:Type local:ViewModel2}" 
           ItemsSource="{Binding Liste}">
           <!-- Controlls mit Binding zu den Daten-->
        </HierarchicalDataTemplate>
    
        <DataTemplate 
           DataType="{x:Type local:ViewModel3}">
           <!-- Controlls mit Binding zu den Daten-->
        </DataTemplate>
     </TreeView.Resources>
    

    So jetzt habe ich den Baum aufgebaut und das Aussehen der einzelnen Knoten festgelegt. Nun habe ich aber immer noch ein Baum zum aufklappen. Und die Elemente sind nicht grafisch ineinander verschachtelt.

    Was muss ich dazu machen?



  • Überschreibe das TreeViewItem Template (ItemContainerStyle) und nimm dort nur den ItemsPresenter rein, wenn die Items innerhalb des HierarchicalDataTemplate bereits ihr Aussehen definieren, brauchen die TreeViewItems kein eigenes Template mehr sondern müssen sie nur noch anzeigen.



  • Ok also doch nicht über HierarchicalDataTemplate. Hättest du mir vieleicht einen kleinen Ansatz an Code.



  • sausebrause schrieb:

    Ok also doch nicht über HierarchicalDataTemplate.

    Doch - beides.
    Du musst es doch je nach Level und Typ unterscheiden können, das kannst du im Style nicht.

    <TreeView>
        <TreeView.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type TreeViewItem}">
                            <ItemsPresenter />
                            <!-- Die Items sind non lookless, sie werden einfach nur dargestellt,
                                 ohne das das TreeViewItem ein eigenes Aussehen haben -->
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </TreeView.ItemContainerStyle>
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type local:ViewModel1}" ItemsSource="{Binding Liste}">
                <!-- Controlls mit Binding zu den Daten-->
            </HierarchicalDataTemplate>
    
            <HierarchicalDataTemplate DataType="{x:Type local:ViewModel2}" ItemsSource="{Binding Liste}">
                <!-- Controlls mit Binding zu den Daten-->
            </HierarchicalDataTemplate>
    
            <DataTemplate DataType="{x:Type local:ViewModel3}">
                <!-- Controlls mit Binding zu den Daten-->
            </DataTemplate>
        </TreeView.Resources>
    </TreeView>
    

    (Nur hier im Forum getippt aus dem Gedächtnis)



  • Dank dir. So weit war ich schon. Nur was kommt nun in den Itemspresenter rein. Hier muss ich doch sagen wo Ebene1, 2 oder 3 hingehören. Also wie die Elemente angeordnet werden. Oder? Wie sage ich nun z.B. Ebene1 gehört in das Stackpanel ganz oben hin usw.



  • Und du bist dir ganz sicher dass es funktioniert dass ich die einzelnen Ebenen ineinander darstellen kann.

    Also in einem Tree wird doch alles untereinader dargestellt. Also bin die ganze Zeit am googeln. Finde kein Beispiel bei dem ein Tree seine Items ineinader darstellt. Entweder benutze ich die falschen Suchbegriffe oder es hat halt einfach noch niemand so was gemacht.



  • Ok ich nehme alles zurück und behaupte das Gegenteil:

    Hier wird das ganze auch gemacht:

    http://www.codeproject.com/KB/WPF/AdvancedCustomTreeViewLyt.aspx

    Allerdings nicht mit HierarchicalDataTeplate. Bringt mir insofern auch nicht weiter.



  • Hilfe 🙂

    Komm einfach nicht auf die Lösung wie ich die Zweige ineinader anzeige.



  • Hänge dazu an dem Satz fest:

    <!-- Die Items sind non lookless, sie werden einfach nur dargestellt,
    ohne das das TreeViewItem ein eigenes Aussehen haben -->

    Was ist der Unterschied zwischen Items und TreeViewItem
    wo ist der Unterschied zwischen "non lookless" und "ohne eigenes Aussehen".

    Oder ist der Satz einfach nur doppelt gemoppelt und gramatikalisch schlichtweg falsch?



  • Endlich. Nach langem rumprobieren habe ich es selber rausgefunden. Ich werds man aufs wesentliche kürzen und hier reinstellen.


Anmelden zum Antworten