Support, Anregungen, Wünsche zur Tutorialreihe <WPF lernen/>

  • WPF MVVM

Es gibt 448 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    MichaHo schrieb:

    Bin halt etwas verwirrt, weil in der obersten Ebene auf MainSteps gebunden wird, aber Instructions angezeigt:

    Irgendiwe aber klar. Du hast ein DataTemplate für den Typ Instruction. In diesem gibt es ein Property mit dem Namen "MainSteps".
    Also ist in dem DataTemplate welches ein Instraction darstellt auch auf MainSteps gebunden.

    Und darunter ist das DataTemplate für den Typ MainStep und dort wird auf ChildSteps gebunden weil in MainStep eben ChildSteps drinnen ist.
    Und in ChildStep gibts wieder das Property ChildSteps obwohl du meintest das du das nicht brauchst, hast es aber drinnen?

    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. ##

    Japp, das hab ich verstanden, das war mir auch klar.
    Was ich meinte ist, das ich auf oberster Ebene auf MainSteps Binde, aber die Properties von Instruction nutze FormularName und FormularNumber,
    lass ich die letzte Bindung auf ChildSteps aus dem Model ChildStep weg, bekomme ich keine ChildSteps mehr angezeigt.
    Ich hab ja im Grunde 3 Ebenen. Instruction, MainSteps, ChildSteps.
    Also müsste nach meinem Verständnis das Binding so sein Binding: Instructions Model:Instruction, Binding MainSteps Model Instruction, Binding ChildSteps Model MainStep. Es werden aber nur alle 3 Ebenen angezeigt wenn ich dies benutze:

    XML-Quellcode

    1. <TreeView DataContext="{Binding}" ItemsSource="{Binding AvailableInstructionView}" >
    2. <TreeView.Resources>
    3. <HierarchicalDataTemplate ItemsSource="{Binding MainSteps}" DataType="{x:Type model:Instruction}">
    4. <StackPanel Orientation="Horizontal">
    5. <TextBlock>
    6. <Run Text="{Binding FormularNumber}"/>
    7. <Run Text=" - "/>
    8. <Run Text="{Binding FormularName}"/>
    9. </TextBlock>
    10. </StackPanel>
    11. </HierarchicalDataTemplate>
    12. <HierarchicalDataTemplate ItemsSource="{Binding ChildSteps}" DataType="{x:Type model:MainStep}">
    13. <StackPanel Orientation="Horizontal">
    14. <TextBlock>
    15. <Run Text="{Binding StepNumber}"/>
    16. <Run Text=" - "/>
    17. <Run Text="{Binding StepText}"/>
    18. </TextBlock>
    19. </StackPanel>
    20. </HierarchicalDataTemplate>
    21. <HierarchicalDataTemplate ItemsSource="{Binding ChildSteps}" DataType="{x:Type model:ChildStep}">
    22. <StackPanel Orientation="Horizontal">
    23. <TextBlock>
    24. <Run Text="{Binding StepNumber}"/>
    25. <Run Text=" - "/>
    26. <Run Text="{Binding StepText}"/>
    27. </TextBlock>
    28. </StackPanel>
    29. </HierarchicalDataTemplate>
    30. </TreeView.Resources>
    31. </TreeView>
    "Hier könnte Ihre Werbung stehen..."

    MichaHo schrieb:

    lass ich die letzte Bindung auf ChildSteps aus dem Model ChildStep weg, bekomme ich keine ChildSteps mehr angezeigt.

    Nicht die Bindung weg lassen. Du kannst in der Klasse ChildStep die ChildStepsObservableCollection<ChildStep> childSteps weglassen.
    Das Binding muss bleiben weil es ja innerhalb von MainStep greift und auf ChildSteps gebunden ist. 8-)

    MichaHo schrieb:

    Also müsste nach meinem Verständnis das Binding so sein Binding: Instructions Model:Instruction, Binding MainSteps Model Instruction, Binding ChildSteps Model MainStep.

    Ist es ja auch?

    Grüße
    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. ##

    MichaHo schrieb:

    nach ChildSteps kommt ja nix mehr...

    Richtig, so hattest du es zumindest geschrieben ?(

    Freut mich das ich jetzt helfen konnte!

    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. ##

    Hallo Leute, etwas ruig hier.

    Hat denn niemand mehr Fragen zu den Convertern oder zu den Templates?
    Ansonsten bereite ich gerade das nächste (ICollectionView) vor und könnte noch die ein oder andere Frage im Video beantworten.

    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. ##

    So Leute, wieder ein Teil online.

    Tutorialreihe <WPF lernen/>

    Viel Spass.

    PS: Habe ein neues Intro. Wie gefällt es euch?

    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. ##

    Hallo @VB1963

    VB1963 schrieb:

    Eine Frage habe ich zu diesem Kapitel: Hat es einen Grund, dass du das Filtern der Daten nicht behandelst?

    Gute Frage. Ja, es ging mir nur darum zu zeigen wie man eine CollectionView in den Code bekommt wenn man diese in XAML erzeugt. Im zweiten Teil mach ich auch das Filtern.
    Das Video ist bereits auf meinem Kanal Online und der Beitrag eingereicht, aber noch nicht freigeschaltet. Das vorgehen beim Filter unterscheidet sich in beiden Fällen überhaupt nicht da Filtern wirklich nur über Code geht, weshalb ich es nur 1x behandeln wollte.

    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. ##

    Sooo, nun ist der Teil 2 auch Online :thumbup:

    Was haltet Ihr von meinem Intro. Gut oder eher fehl am Platz, ich bin mir nicht sicher?

    Sonst irgendwelche Fragen.... traut euch!!

    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. ##

    Ich muss gestehen ich habe soeben das erste mal in eines deiner Videos hineingesehen, und dann auch nur in die ersten Minuten.

    Mein erster Eindruck war, dass das ganze doch sehr der ganzen möchtegern Youtube VB Programmierern ähnelt, und auch deine Stimme mich zuerst etwas abgeschreckt hat. Jedoch wurde mir dann bewusst, wenn deine Videos auch nur halb so gut sind, wie dein Text-Tutorial (worauf ich mal Blind vertraue, da sie vmtl. als Skript dienen) bist du eh besser, als 95% der YT Tutorials. Dazu hast du noch einen, für mich jedenfalls, vertrauenswürdigen Akzent und alles ist wieder supi ;)

    Nun aber mal weg von Subjektiven sachen, und hin zu den Subjektiven sachen:
    Das Intro ist in Ordnung, find es jedoch wie oft etwas zu lang. Natürlich ist es schwierig ein passendes Musikstück für eine gegebene Zeit zu finden, ohne einfach mitten im Stück die Musik ausblenden zu müssen. Das Genre find ich jedoch ziemlich gut :thumbup:

    Etwas Objektives hier noch:
    Hast du zum vorherigen Video etwas an der Tonspur verändert? Zwischen dem letzten und vorletzten Video scheint die Audiokompression weggefallen zu sein, was auf der einen Seite keine Kompressionsartefakte bedeutet, auf der anderen jedoch nun das Grundrauschen des Mikrofons zu hören ist. Vielleicht spielt mir Youtube aber auch einen Streich und hat trotz 1080p ne komprimierte Tonspur abgespielt.
    Hallo @EaranMaleasi

    Danke für dein wertvolles Feedback.

    EaranMaleasi schrieb:

    Mein erster Eindruck war, dass das ganze doch sehr der ganzen möchtegern Youtube VB Programmierern ähnelt, und auch deine Stimme mich zuerst etwas abgeschreckt hat. Jedoch wurde mir dann bewusst, wenn deine Videos auch nur halb so gut sind, wie dein Text-Tutorial (worauf ich mal Blind vertraue, da sie vmtl. als Skript dienen) bist du eh besser, als 95% der YT Tutorials. Dazu hast du noch einen, für mich jedenfalls, vertrauenswürdigen Akzent und alles ist wieder supi

    Mir ist (leider) bewusst das YT Videos immer so eine Sache sind. Also Programmierer startet man solche Videos erstmal eher skeptisch. Es ist schwer hier dann wieder das Ruder "rumzureißen".
    Naja, gegen meine Stimme kann ich nix, glaub mir - ich kann sie auch nicht hören <X . Freut mich aber das dir mein Akzent gefällt. *gg* Und danke für das Lob.

    EaranMaleasi schrieb:

    Hast du zum vorherigen Video etwas an der Tonspur verändert? Zwischen dem letzten und vorletzten Video scheint die Audiokompression weggefallen zu sein, was auf der einen Seite keine Kompressionsartefakte bedeutet, auf der anderen jedoch nun das Grundrauschen des Mikrofons zu hören ist. Vielleicht spielt mir Youtube aber auch einen Streich und hat trotz 1080p ne komprimierte Tonspur abgespielt.

    Du bist gut. Man, ich dachte man merkt es nicht das ich beim letzten Video die Rauschunterdrückung vergessen hatte einzuschalten. :whistling:

    Und ja, du hast recht. In den Videos wir immer genau das durchgenommen was ich auch in den Beiträgen und den PDFs runterschreibe. Ich habe die Videos eigentlich nur Anfänger die Intellisense kennenlernen und auch sehen an welcher Stelle welcher Code eingefügt wird. So kann man die Schritte besser nachvollziehen. Das ist zwar eine Menge Arbeit mehr aber da muss ich durch. Hehe.

    Danke für dein ehrliches Feedback das kann ich gut brauchen, vielleicht kann ich ja an der Stimme arbeiten. Ist ja heute alles möglich.

    Grüße
    Sascha

    Achja, wegen dem Intro. Stimmt schon, ich finds auch zu lang. Evtl. muss ich da noch was drehen. Danke dir.
    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. ##

    Nofear23m schrieb:

    Du bist gut. Man, ich dachte man merkt es nicht das ich beim letzten Video die Rauschunterdrückung vergessen hatte einzuschalten.
    Ah, Rauschunterdrückung, hatte ich nicht auf dem Schirm ^^
    Womit nimmst du denn das ganze auf?

    Nofear23m schrieb:

    Naja, gegen meine Stimme kann ich nix, glaub mir - ich kann sie auch nicht hören
    Kaum jemand hört sich gerne selbst auf Aufnahmen, meist mit diesem "Oh Gott, so hören mich andere?" Gefühl. Das ist ne Sache an die man sich wirklich gewöhnen muss. Darüber hinaus ist es immer gut, wenn man seinen Sortierapparat auf dem Hals mit Gegenbeispielen füttern kann. Hilft dabei die Welt jedesmal ein Stückchen differenzierter wahrzunehmen. Daher bleib ruhig bei deiner Stimme, nur wegen einer Person im Internet ist es nicht nötig da groß was zu verändern. ;)

    EaranMaleasi schrieb:

    Womit nimmst du denn das ganze auf?

    Mit OBS Studio. Ist Opensource und eigentlich sehr gut. Ich bin mehr als zufrieden damit. Kann extrem viel und ist sogar für Live Webcasts geeignet.
    obsproject.com/de

    EaranMaleasi schrieb:

    Daher bleib ruhig bei deiner Stimme, nur wegen einer Person im Internet ist es nicht nötig da groß was zu verändern.

    Jedes mal wenn ich sie höre stirbt etwas in mir. :/ Naja, mal sehen was ich mach. Die zahl der klicks ist eh so gering das es vermutlich egal ist.

    Naja @EaranMaleasi, bedeutet das etwa das du dich auch an die WPF ranwagst oder hast du nur mal "reingesehen"??

    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. ##

    Nofear23m schrieb:

    Mit OBS Studio
    Jou, hab ich auch schon mit gearbeitet, jedoch nur für Livestreams, nicht zum Aufnehmen. Falls es dir nicht zu Aufwendig wird, könntest du ja mal Audacity neben OBS laufen lassen, und so eine reine Tonspur aufnehmen. Audacity bietet z.B. ein Tool um "Noise" zu vermindern. Dabei nimmst du einfach einige Sekunden auf, ohne einen Laut von dir zu geben, sodass das Tool das Rauschen des Mikrofons "lernen" kann, und dass dann eben vom restlichen Track abzieht. Afaik klingt das besser, als Live-Rauschunterdrückung. Musst dann jedoch halt hinterher die Tonspur wieder mit dem Video vereinen.

    Nofear23m schrieb:

    bedeutet das etwa das du dich auch an die WPF ranwagst
    Nein, leider nicht. Auch wenn ich mich bereits mit MVVM auseinandergesetzt habe, als ich in die App-Entwicklung mit Xamarin.Forms eingestiegen bin (mitsamt Autfoac als DI-Container), ist das ein anderer XAML-Dialekt der bei weitem nicht das leistet, was WPF alles beherrscht.
    Sollte ich jedoch eines Tages tatsächlich in die Verlegenheit kommen, WPF nutzen zu dürfen, kannst du sicher sein, dass ich mir dein Tutorial von vorne bis hinten und wieder zurück durchsehen werde.
    Hallo

    Ein versuch ist es sicher wert. Mal sehen was Audacity so kann, muss ich mich mal mit beschäftigen.

    OK, na vielleicht kommst du mal in die Verlegenheit ein Projekt in WPF verwirklichen zu wollen.

    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. ##

    Hi @Nofear23m,
    schönes Tut wieder!
    Das Intro find ich gut, zu lang finde ich es jetzt auch nicht.
    Beim Teil 2 ist mir eine Frage aufgekommen.
    Du erstellst dort ja den Filter für das ICollectionView (AllPersonView) und sagst das die Methode für jedes Element aufgerufen wird, in deinem Beispiel also 4 Mal.

    Was ist wenn ich 10.000 Elemente habe? ist das dann nicht Ressourcen fressend? Bzw. Dauert das Filtern dann nicht ewig? Gibt es da nicht etwas schnelleres?

    Danke Dir
    "Hier könnte Ihre Werbung stehen..."
    Hallo @MichaHo

    MichaHo schrieb:

    Was ist wenn ich 10.000 Elemente habe? ist das dann nicht Ressourcen fressend? Bzw. Dauert das Filtern dann nicht ewig? Gibt es da nicht etwas schnelleres?

    Die Frage ist berechtigt und es freut mich das du so gut aufpasst. Klar kann es bei vielen Datensätzen - natürlich auch abhängig davon in welchen Properties überall gefiltert wird - langsamer werden. Das Filtern geht zwar überraschend schnell aber dennoch kann man bei mehreren tausend Datensätzen dennoch spüren das es hier dauert.

    Hier muss man sich immer gut überlegen was man wo macht. Diese Art zu Filtern ist eher rein für die View gedacht. Also das ich eine Ergebnismenge beispielsweise noch Filtere.
    Ich persönlich versuche es unbedingt zu vermeiden überhaupt so viele Datensätze zu laden. Weil so gut wie immer unnötig. Kein User wird 10000 Datensätze durchscrollen, also warum anzeigen?

    Beispiel:

    Ein Rechnungsprogramm in dem ich eine Rechnung schreiben möchte. Oft sieht man das hier ein DataGrid zu sehen ist mit allen Kunden. Und irgendwo habe ich dann Textfelder wo ich z.b. die PLZ Filtern kann. Oder den Namen. Unnötig!! Muss ich die Daten über die WAN Leitung bringen habe ich hier völlig unnötigen Traffik. Ich benötige EINEN Kunden und lade zig Tausend. Ne

    Warum nicht erst einen Dialog bringen in dem ein ein paar Felder gibt. Name, PLZ, Ort, Mailadresse usw.
    Ich gebe dort die Daten ein die ich weis wie z.b. den Namen. Je mehr ich eingebe desto mehr selektiere ich herunter. Mit Enter oder klick auf suchen öffnet sich ein weitere Dialog mit den Ergebnissen. Diesmal werden es vermutlich weniger als 50 sein. Und dort kann ich dann wieder mit dem Filter arbeiten und DEN EINEN zu bekommen den ich brauche.

    Ich weis, das ist jetzt nicht wirklich die Antwort die du hören wolltest.

    Kurz - Filtern auf der CollectionView ist für die View gedacht. Filtern auf Datenebene überlasse ich eine Datenbank oder was auch immer mir die Daten bringt.

    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. ##

    Nofear23m schrieb:

    Warum nicht erst einen Dialog bringen in dem ein ein paar Felder gibt. Name, PLZ, Ort, Mailadresse usw.
    Ich gebe dort die Daten ein die ich weis wie z.b. den Namen. Je mehr ich eingebe desto mehr selektiere ich herunter. Mit Enter oder klick auf suchen öffnet sich ein weitere Dialog mit den Ergebnissen. Diesmal werden es vermutlich weniger als 50 sein. Und dort kann ich dann wieder mit dem Filter arbeiten und DEN EINEN zu bekommen den ich brauche.
    Unsere Kunden würden uns das Haus abbrennen, müssten sie jedes mal eine Suche starten, bevor sie ein paar Einträge sehen. Oft ist es sogar der Fall, dass sie nichtmal genau den Namen wissen, nach dem sie suchen, jedoch ziemlich genau die Position in der Liste kennen, oder noch besser, auch wenn relativ speziell, die Position des Gesuchten innerhalb eines TreeViews (in Kundensprech "Hierarchie") auswendig wissen. Wenn ich jedes mal, wenn ich einen Knoten aufklicke erst die Datenbank befragen müsste, hätten einige Kunden rießige Probleme da die Latenzen aufgrund der teils miserablen Infrastruktur bis in die Sekunden reichen. Da ist es bei weitem besser alle Daten im voraus zu laden. Oder z.B. auch die Inkrementelle Suche in Listen/Grids. Einfach reinklicken, und lostippen, und die Liste sortiert sich und springt automatisch zu dem Datensatz mit dem besten Treffer in besagter Spalte. So kann man ganz fix etwas finden, ohne jedes mal auf eine Datenbank im letzen Eck warten zu müssen, die auf 10 Jahre alter Hardware läuft und gefühlt mit 1Mbit angeschlossen ist. Leider noch immer Realität in einigen Mittelständischen Industrieunternehmen.