MVVM-Light: RelayCommand - canExecute As Func(Of Boolean)

  • WPF

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Jeiss.

    MVVM-Light: RelayCommand - canExecute As Func(Of Boolean)

    Hallo Leute,
    Könnte mir bitte jemand bei meinem RelayCommand in einem WPF Window helfen. (also genauer gesagt in dessen ViewModel)
    Das Command verlangt irgendwie nach einem "Func(of Boolean)" als CanExecute Funktion.
    Hie mal ein Bildchen dazu:

    Oh, geht irgendwie nicht...!!! Kann kein Bild von meiner Festplatte einblenden....schade.
    Gut sieht also aus als ob mir erst mal jemand dabei helfen müsste mein Bild hier rein zu bringen.
    Weiss vielleicht jemand wie das geht?
    Ah hab da unten im Fenster die Dateianhaenge entdeckt. Mal sehen ob das klappt...

    Also gukt euch doch bitte mal mein Bildchen im Anhang an. Das wird euch helfen mein Problem besser zu verstehen.
    Übrigens, VB.NET Code wäre mir viel lieber.

    Danke,
    Jeiss
    Bilder
    • CanExecute_Error.JPG

      40,96 kB, 1.065×163, 215 mal angesehen
    Hallo ErfinderDesRades,
    ​Jeiss schrieb: Das Command verlangt irgendwie nach einem "Func(of Boolean)" als CanExecute Funktion
    Na, dann gib ihm eine.

    ​Ziemlich clever! Weiss nicht ob ich da drauf gekommen wäre ^^
    ​Der Ausdruck Function()True ist zB eine gültige Func(Of Boolean)

    ​Ist ja hoffentlich nicht die Einzige?
    ​Stell dir mal vor ich käme plötzlich auf den Gedanke eine separate Funktion mit ein bisschen Logik und einem Return-Wert anlegen zu wollen.
    ​Wie könnte die dann aussehen?
    ​Eine "gewöhnliche" Function "à la"..

    VB.NET-Quellcode

    1. Function MyFunc() As Boolean
    2. Return True/False
    3. End Function

    ​geht jedenfalls nicht... :(

    Danke,
    Jeiss
    klar geht das: Schreib statt Function()True halt AddressOf MyFunc rein.
    So machtes ja auch erst Sinn, nämlich wenn die Funktion auch bisserl Logik enthält, und tatsächlich auch angeben kann, ob das Command ausgeführt werden kann oder nicht.
    Wobei ich denke - OpenChildWindow() wird immer ausführbar sein, also da ist Function()True die richtige Aussage.

    Wenn du magst, guck dir mal Grundlagen - MVVM-Anwendungs-Struktur , ich glaub da sind auch Beispiele, wo über dieses Instrument bewirkt wird, dass ein Remove-Button disabled ist, wenn die Liste leer ist (also wenns halt nix mehr zu löschen gibt)

    Wenn du noch mehr magst, studiere mal Grundlagen: Fachbegriffe, was da zu "Signaturen" gesagt ist. Also wenn eine Func(Of Boolean) verlangt ist, kannst du natürlich nur Methoden angeben, die dieser Signatur auch entsprechen.

    Und guck dir im ObjectBrowser auch die anderen generischen Func - Delegaten an, und guck dir ebenso die Action-Delegaten an - die sind nämlich für Subs (also ohne Rückgabewert)
    Func und Action sind eminent wichtige generische Delegaten - tatsächlich kann (und sollte) man damit fast jede erdenkliche Signatur formulieren.
    Die Zeiten, wo man für jeden Delegaten eine eigene Deklaration schrieb, sind eiglich seit 2005 vorbei.

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

    Hey...wie cool ist das denn..einfach nur toll.

    ErfinderDesRades schrieb:

    Wobei ich denke - OpenChildWindow() wird immer ausführbar sein, also da ist Function()True die richtige Aussage.

    ​Ja so gesehen stimmt das natürlich. Ich war eben nur neugierig und wollte versuchen raus zu finden wie man canExecute, mit dem RelayCommand von Galasoft einsetzen kann. Was jetzt ja geregelt wäre, danke!
    Bei diesem Button, welches ein weiteres Fenster öffnen soll, ist das natürlich ein wenig überflüssig.
    ​Das Projekt das ich mir zu Lernzwecke angelegt hab, soll mir helfen das öffnen eines zweiten Fensters zu begreifen. (und später sogar mit Rückgabe) Und natürlich stoße ich dann immer wieder auf neue Probleme, auf die ich dann eine Antwort finden möchte......tja so bin ich nun eben einmal.
    ​Ich kann es mir ja auch leisten, denn ich programmiere wirklich nur aus Spaß an der Sache...... Ich hab keine Kunden oder Chef im Nacken sitzen die auf ein Ergebnis warten oder so...
    ​Ich werde mich übrigens auch bestimmt bald, wegen dieser "Fenster öffnen Angelegenheit, hier im Forum mit einer neuen Frage melden. Es interessiert mich nämlich zu erfahren wie ein View und ein ViewModel, unter Berücksichtigung des MVVM Prinzips, miteinander "verstrickt" werden sollten.....
    ​Ich werde mir die von dir vorgeschlagene Lektüre natürlich anguken, kein Thema.
    ​Du hast übrigens auch gut daran getan mich wieder an den ObjectBrowser zu erinnern, den nutze ich viel zu wenig.... Der verrät ja mehr über das RelayCommand (von Galasoft) als man durch Googeln erfährt....

    Vielen Dank für deine schnelle Hilfe,
    ​Jeiss