Sind mehrere CommandParameter anzugeben möglich?

  • WPF MVVM
  • .NET (FX) 4.5–4.8

Es gibt 24 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

    Tja lieber Kaffee, es gibt ja nur ein eigens Kapitel über dieses Thema in meiner Reihe. Tja, wohl nicht angesehen. Ich würde das ALLES mal durchgehen sonst stehst du immer und wieder an. Nur gut gemeint.

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

    Also dein ViewModel scheint unvollständig.
    _Playlist
    Playlist
    gibt es 2 mal, wird aber nichts mit gemacht.
    DeckLeft und DeckRight wird nirgends initialisiert genauso wie Crossfader
    was soll dann da im View passieren?
    Wenn Du Eigenschaften an die View bindest, sollten diese auch Werte haben.
    kann man easy überprüfen wenn man den DesignTime Datenkontext nutzt wir @ErfinderDesRades schon sagte.
    und die Empfehlung von @Nofear23m kann ich nur unterstützen.
    ich gehe sogar soweit zu sagen das Du dein Vorhaben mit allen Videos von Sascha umgesetzt bekommst.
    Sollte dann noch was klemmen frag halt.
    "Hier könnte Ihre Werbung stehen..."
    @MichaHo

    Ja ich weiss, das Ganze ist noch leer... Es sollen z. B. Tracks von meiner SucheView in die PlattendecksView übertragen werden, und zwar an das Plattendeck, das in der SucheView mit den Radio Buttons ausgewählt ist. Siehe dazu die Screenshots von mir weiter oben. Ich hatte eigentlich vor das wie in diesem Thread zu lösen:

    Zwei ähnliche Methoden zusammenfassen?

    Problem ist, dass ich zwei Parameter brauche:

    Einmal die Tracks, und einmal welches Plattendeck. Per CommandParameter lässt sich aber leider nur ein Argument übergeben.

    Nun bin ich dem Ratschlag von @Nofear23m gefolgt und hab aus der View mit meinen Plattendecks, in dem quasi der gleiche Code zweimal vorkam, daraus ein(!) UserControl gemacht, und das dann aber zweimal eingebunden, einmal mit Datenkontext DeckLeft und einmal DeckRight, und dann im Viewmodel zwei Eigenschaften, DeckLeft und DeckRight angelegt.

    Aber das weitere Vorgehen ist mir unklar. Es geht mir weniger um die Umsetzung sondern eher die Idee, die dahintersteckt. Deswegen warte ich grad gespannt auf die Antwort von @Nofear23m, wie er das denn geplant hatte...

    Mit den Videos/Kapiteln von @Nofear23m hab ich schon viel hinbekommen, deswegen schau ich mir das Ganze jetzt nochmal an, das mit dem DesignTime Support scheint ja eine interessante Sache zu sein. Hab gestern auch die View meiner vierten Registerkarte "Einstellungen" fertig gemacht, das ist wie prädestiniert zum Ausprobieren beim Binding ans Viewmodel...

    So far...

    kafffee

    kafffee schrieb:

    Aber das weitere Vorgehen ist mir unklar.

    Sorry, da ich heute den ganzen Tag unterwegs war hatte ich noch keine Zeit mir deinen Thread genauer anzusehen.

    So aus der Hüfte geschossen:

    Was machst du da im Constructor? 1x die Provate Variable und 1x das dazugehörige Property setzen? Wozu? Und wo ist dieses? Ich sehe das nicht in der Klasse. Und eine Partial-Class ist es ja nicht. Wo ist Playlist?
    Warum sind die Properties nicht korrekt? Weder im Getter noch im Setter was vorhanden? Wie das? Sag nicht weil noch nicht fertig.
    Das musste ja sogar extra entfernen. wenn ich in VS ein Property erstelle mittels prop + TAB,TAB dann habe ich einen kompletten Baum. Also What?

    Weil du in den Vorposts geschrieben hast das du (von nun an) mit DesignTime-Support arbeiten willst würde ich sagen hier fehlt ein Parameterloser Konstruktor. Den wirste brauchen, sonst gibts nen Fehler im Deisgner.

    Aber sonst vom "allgemeinen Aufbau" des VMs ist es ja so wie du dir das denkst.
    Ist ja im Grunde Simple. Wenn du meinen Screenshot hernimmt hast du für jedes Kästchen ein ViewModel - bzw. für jede Farbe in meiner Grafik. Und da eine Farbe 2x vorkommt sind das zwei Instanzen vom selben VM.

    Jetzt code das mal aus und dann sehen wir weiter. Und arbeite Brav die Kapitel durch. Ich mach die ja nicht umsonst ;)
    Das hat schon einen Sinn die durch zu rackern.

    Grüße
    Sascha

    EDIT:

    kafffee schrieb:

    Wir müssen jetzt erstmal ohne einen Projektupload auskommen, ich habe es zwar versucht hinauszuzögern, aber es liess sich nicht mehr vermeiden, eine Drittanbieter-DLL einzubinden...

    Tja, genauso wie viele den DesignTime-Support unterschätzen oder einfach nciht wissen das es den gibt verhält es sich mit NuGet.
    Eines der (meiner Meinung nach) besten implementierungen in VS die Microsoft ja gemacht hat.
    Einne kurze suche: nuget.org/packages?q=bass
    ergibt das es hier alles schon gibt.
    BASS Library:

    Quellcode

    1. ​Install-Package BASS -Version 2.4.12.1

    BASS NET Wrapper

    Quellcode

    1. ​Install-Package Bass.NetWrapper -Version 2.4.12.5


    Und wenn du über NuGet einbindest kannst du dein Projekt so wie es ist auf jedem Rechner unter VS kompilieren da Abhängigkeiten automatisch nachgeladen werden.
    sonst wäre es fast nicht möglich mittels Quellcodeverwaltung (die du vermutlich auch nicht nutzt) im Team zu arbeiten.

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

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Nofear23m“ ()

    @Nofear23m

    Aaah jetzt ja... Ich hatte vorhin wieder einen meiner Geistesblitze. Ich glaub ich weiss jetzt was du vor hast bzw. worauf du hinaus möchtest.
    Wenn das so funktioniert wie ich mir das denke dann wäre das mega genial. Ich werd mal in die Tasten hauen und mich dann nochmal melden...

    Wegen der Einbindung mit NuGet:
    Hätte der Code den du gepostet hast den gleichen Effekt wie wenn ich das über das Menü machen würde? Nennt sich glaube ich "NuGet-Pakete verwalten" oder so...

    Und wegen Azure DevOps. Ich bin soooo froh dass du das ansprichst. Ich hab das mal versucht gehabt damit und bin irgendwo gescheitert, weil ich auch keine gescheiten Tutorials / Beispielvideos gefunden hab dazu. Hast du mir vielleicht einen Link oder könntest du mir das zeigen wie das geht? Muss ja nicht die volle Breitseite sein, die Funktion die Projekte hochzuladen und die Versionen dann mit Kommentar abzuspeichern bzw. das dann auch teilen zu können würde mit vorerst genügen...

    Freu mich auf deine Antwort,

    kafffee



    @Nofear23m

    Sooo jetzedle... Sry bin erst jetzt dazu gekommen. Es funktioniert alles so wie ich das will. Meegaaaacoool... Sogar die bass.dll spielt mit, im wahrsten Sinne des Wortes. Leider ist das bass.dll-Package von NuGet eine ältere Version als die, die ich verwende. Und auch die UltraID3Lib.dll zum Auslesen der ID3Tags hab ich bei NuGet nicht gefunden...


    Meine PlattenDecksViewModel sieht jetzt folgdnermassen aus:

    VB.NET-Quellcode

    1. ​Option Strict On
    2. Imports System.Collections.ObjectModel
    3. Imports System.Windows
    4. Imports System.Windows.Input
    5. Imports VamosALaPlayer_3._0.ViewModel.Instrastructure
    6. Imports Un4seen.Bass
    7. Public Class PlattendecksViewModel
    8. Inherits Instrastructure.ViewModelBase
    9. Private Property LayerViewModel As ViewModel.LayerViewModel
    10. Sub New(Parent As ViewModel.LayerViewModel)
    11. LayerViewModel = Parent
    12. Bass.BASS_Init(-1, 44100, BASSInit.BASS_DEVICE_CPSPEAKERS, IntPtr.Zero, Nothing)
    13. End Sub
    14. Public Property DeckLeft As ViewModel.DeckViewModel = New ViewModel.DeckViewModel
    15. Public Property DeckRight As ViewModel.DeckViewModel = New ViewModel.DeckViewModel
    16. Private _Crossfader As Integer
    17. Public Property Crossfader As Integer
    18. Get
    19. Return _Crossfader
    20. End Get
    21. Set(value As Integer)
    22. _Crossfader = value
    23. RaisePropertyChanged()
    24. End Set
    25. End Property
    26. End Class


    Und das DeckViewModel:

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.Windows.Input
    3. Imports VamosALaPlayer_3._0.ViewModel.Instrastructure
    4. Imports Un4seen.Bass
    5. Public Class DeckViewModel
    6. Inherits Instrastructure.ViewModelBase
    7. Public streamA As Integer
    8. Public Sub New()
    9. End Sub
    10. Private _Abspielen As ICommand
    11. Public ReadOnly Property Abspielen() As ICommand
    12. Get
    13. If _Abspielen Is Nothing Then _Abspielen = New RelayCommand(AddressOf Abspielen_Execute, Function(o) True)
    14. Return _Abspielen
    15. End Get
    16. End Property
    17. Public Sub Abspielen_Execute(obj As Object)
    18. Dim item As Model.MP3FileInfo = CType(obj, Model.MP3FileInfo)
    19. streamA = Bass.BASS_StreamCreateFile(item.Dateiname, 0, 0, BASSFlag.BASS_STREAM_AUTOFREE Or BASSFlag.BASS_STREAM_PRESCAN) 'für jedes Plattendeck wird in streamA bzw. streamB dann ein Integer zur Identifizierung des Abspielkanals hinterlegt
    20. Bass.BASS_ChannelPlay(streamA, False)
    21. End Sub
    22. End Class

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „kafffee“ ()