Visual Basic | Hilfe bei Datenvorlagen

  • WPF

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Visual Basic | Hilfe bei Datenvorlagen

    Guten Tag,

    ich bin derzeit dabei mit mich WPF Anwendungen zu beschäftigen und lese mir dabei folgendes durch: msdn.microsoft.com/de-de/library/mt149842(v=vs.110).aspx
    nun bin ich beim Thema Datenvorlagen angelangt... ich habe den Code abgeschrieben und mir ist nun nicht bekannt wie ich dort Daten reinbekomme bzw. woher dieses Angegebene Script sich diese holt...

    Es steht zwar da, dass es an eine Auflistung von "Task - Objekten" gebunden ist aber ich weiss nicht was gemeint ist....


    Hoffe jemand kann mir da weiterhelfen...

    Freundliche Grüße
    Paradoxdev
    Ich kenn mich leidlich in Wpf aus, aber was Datenvorlagen sind, weiss ich nicht.
    Ich werd jetzt auch nicht 2h investieren und den von dir verlinkten Artikel durchackern.

    Jo - so viel von meiner Warte. Womöglich fragst du dich, warum ich das schreibe. Einfach, dass du dich nicht wunderst, wenn du auf deine Frage so, wie sie formuliert ist, niemand antwortet.
    Aber vielleicht kennt sich ja jemand gut damit aus, und weiss auch, welchen Code du abgeschrieben hast, und "woher dieses Angegebene Script sich diese holt..."
    Erstmal vielen Dank für die Antwort...
    Entschuldige, dass ich mich so ungenau ausgedrückt habe.

    Also in dem MSDN Artikel "Einführung in WPF" (Link oben gegeben) wird etwas nach der Mitte das Thema "Datenvorlagen" behandelt.

    Hier ein Zitat:

    "Während Sie mit einer Steuerelementvorlage die Darstellung eines Steuerelements angeben können, können Sie mit einer Datenvorlage die Darstellung des Inhalts eines Steuerelements angeben. Datenvorlagen werden häufig dazu verwendet, die Anzeige gebundener Daten zu verbessern. Die folgende Abbildung zeigt die Standarddarstellung für ein ListBox-Steuerelement, das an eine Auflistung von Task-Objekten gebunden ist, wobei jede Aufgabe einen Namen, eine Beschreibung und eine Priorität hat."

    Dort habe ich den folgenden Code abgeschrieben und frage mich nun wie man dort die da beschriebenen Daten einfügen kann.

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:LEARN"
    7. mc:Ignorable="d"
    8. Title="Button Content"
    9. Height="350"
    10. Width="335.169">
    11. <Window.Resources>
    12. <!-- Data Template (applied to each bound task item in the task collection) -->
    13. <DataTemplate x:Key="myTaskTemplate">
    14. <Border Name="border" BorderBrush="DarkSlateBlue" BorderThickness="2"
    15. CornerRadius="2" Padding="5" Margin="5">
    16. <Grid>
    17. <Grid.RowDefinitions>
    18. <RowDefinition/>
    19. <RowDefinition/>
    20. <RowDefinition/>
    21. </Grid.RowDefinitions>
    22. <Grid.ColumnDefinitions>
    23. <ColumnDefinition Width="Auto" />
    24. <ColumnDefinition />
    25. </Grid.ColumnDefinitions>
    26. <TextBlock Grid.Row="0" Grid.Column="0" Padding="0,0,5,0" Text="Task Name:"/>
    27. <TextBlock Grid.Row="0" Grid.Column="1" Text="{Binding Path=TaskName}"/>
    28. <TextBlock Grid.Row="1" Grid.Column="0" Padding="0,0,5,0" Text="Description:"/>
    29. <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Path=Description}"/>
    30. <TextBlock Grid.Row="2" Grid.Column="0" Padding="0,0,5,0" Text="Priority:"/>
    31. <TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Priority}"/>
    32. </Grid>
    33. </Border>
    34. </DataTemplate>
    35. </Window.Resources>
    36. <!-- UI -->
    37. <DockPanel>
    38. <!-- Title -->
    39. <Label DockPanel.Dock="Top" FontSize="18" Margin="5" Content="My Task List:"/>
    40. <!-- Data template is specified by the ItemTemplate attribute -->
    41. <ListBox Name="lb"
    42. ItemsSource="{Binding}"
    43. ItemTemplate="{StaticResource myTaskTemplate}"
    44. HorizontalContentAlignment="Stretch"
    45. IsSynchronizedWithCurrentItem="True"
    46. Margin="5,0,5,5" />
    47. </DockPanel>
    48. </Window>
    ah - das ist die grotten-Übersetzung ins Deutsche!
    In Wpf gibts eine Klasse namens DataTemplate, und MS entblödet sich auch Klassen-Namen ist Deutsche zu übersetzen - da kann natürlich niemand jemals was mit anfangen.
    Ja "Daten einfügen" gibts nicht in Wpf. Man bindet an Daten.
    Das setzt ein Viewmodel voraus - hast du eines?
    Und weiters taugt das was du abgeschrieben hast nichts, weil es ist garnet angegeben, für welchen DataType dieses DataTemplate zuständig sein soll.

    Ich täte dir den Wpf-Tutorial-Bereich des Forums empfehlen, und beschäftige dich nur mit Tutorials, wo auch Sources beiliegen, die funktionieren.
    Hallo

    ​DataTemplates kannst du mit einem Key verwenden oder über den Typ wo es noch interessanter wird.

    ​Wofür sind DataTemplates? Im Grunde sagst du der WPF damit welche Art von Object sie bitte mit welchern Control(s) rendern soll.

    ​Ein ganz gutes Beispiel: Du hast eine Verwaltung von Verkehrsmitteln. Da gibt es Flugzeug, Bus, U-Bahn, Auto, Strassenbahn usw.
    ​Jetzt möchtest du das in einem Fenster ein Verkehrsmittel angezeigt wird, willst aber nicht für jede Art von Verkehrsmittel ein eigenes Fenster machen sondern eben nur EIN Fenster in welchem alle angezeigt werden, aber eben jedes anders.

    ​Du legst dir also in den Window.Resources folgende DataTemplates an:

    XML-Quellcode

    1. <DataTemplate DataType="{x:Type vm:Flugzeug}">
    2. <local:FlugzeugUserControl/>
    3. </DataTemplate>
    4. <DataTemplate DataType="{x:Type vm:Auto}">
    5. <local:AutoUserControl/>
    6. </DataTemplate>
    7. <DataTemplate DataType="{x:Type vm:Bus}">
    8. <local:BusUserControl/>
    9. </DataTemplate>
    10. ...​


    ​Im Fenster hast du dann z.b. Ein ContentControl welches auf mit dem Content Property an ein Property in deinem ViewModel gebunden ist welches das jeweilige Object (z.b. Auto oder Bus usw.) hält.
    Übergibst du also ein Object vom Typ Bus wird dieses im Fenster oder wo auch immer, mit dem BusUserControl angezeigt.

    ​Ich bin nicht so gut im erklären, ich hoffe ich konnte etwas die funktionsweise und die Verwendungsmöglichkeit von DataTemplates aufzeigen.

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    na, ob du auf YT was brauchbares findest?

    Üblicherweise ist das Niveau dort ziemlich unterirdisch.
    Meist wird sogar nur gezeigt, wie man (oft genug: schlechten) Code in den Editor tippt - als ob man dafür ein Video bräuchte.

    Und beachte:

    ErfinderDesRades schrieb:

    ..., und beschäftige dich nur mit Tutorials, wo auch Sources beiliegen, die funktionieren.
    Auch ein Punkt, wo YT failt.