Menuitem comman in MVVM

  • WPF

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

    Menuitem comman in MVVM

    Hi ich habe da ein Problem,

    ich will das Command vom Menuitem an eine Funktion vom ViewModel(DataContext) des Windows binden. Leider bekomme ich ständig eine Fehlermeldung:
    Spoiler anzeigen
    e Ausnahme (erste Chance) des Typs "System.Windows.Markup.XamlParseException" ist in PresentationFramework.dll aufgetreten.

    Zusätzliche Informationen: Die Angabe eines Werts für "System.Windows.Baml2006.TypeConverterMarkupExtension" führte zu einer Ausnahme.


    XML-Quellcode

    1. <MenuItem Header="_Add Chart" Command ="AddChart" CommandParameter=""/>

    VB.NET-Quellcode

    1. Public Sub AddChart()
    2. MessageBox.Show("")
    3. End Sub
    man kann nicht an Methoden binden, sondern nur an Properties. Im Viewmodel verwendet man seit 2012 Properties vom Typ DelegateCommand.
    Zuvor musste man sie sich selber coden oder eine zusätzliche dll verwenden.
    Mein "DelegateCommand" heißt dummerweise "RelayCommand" - ansonsten ist der Command-Pattern in fast jedem meiner wpf-tuts mindestens einmal gezeigt - etwa WpfTreeview-Tut.
    Weiters ist deine Syntax total falsch, so setzt man kein Binding. Gugge Binding-Picking im Xaml-Editor.
    Aber Binding-Picking geht nur, wenn im Viewmodel auch geeignete Properties zum dranbinden vorhanden sind.
    naja das wpf-tut hat mir eigentlich nicht so viel geholfen. Das was für mich interessant ist war ja in der GalaSoft.Mvvm. Naja aber durch die Stichwörter habe ich was recht nützliches gefunden: social.msdn.microsoft.com/Foru…plement-icommand-and-mvvm
    Mich würde noch ineteressieren ob ICommand.Execute auch ohne Parameter Übergabe funktioniert. Meine Verusche waren dahingehend nicht erfolgreich.

    Meinst du mit falscher Syntax das ein Path=... fehlt?

    Eggord schrieb:

    Mich würde noch ineteressieren ob ICommand.Execute auch ohne Parameter Übergabe funktioniert. Meine Verusche waren dahingehend nicht erfolgreich.
    Wenns mit Parameter funktioniert - lass alles so wies ist. Du brauchst den Parameter ja nicht zu nutzen.

    Meinst du mit falscher Syntax das ein Path=... fehlt?
    Guck dir halt die Syntax an, mit der ein Binding gesetzt wird.

    Aber wie gesagt: Besser ists, du setzt die Bindings im Xaml-Editor, weil der generiert i.a. die richtige Syntax.
    Der Xaml-Editor kennt meinen DataContext noch garnicht. Der wird erst im Codebehind erzeugt.

    Wenn ich den Datacontext im xaml definiere dann erzeugt mit der xaml-editor folgendes:


    XML-Quellcode

    1. Command ="{Binding Path=AddChartCommand}" DataContext="{Binding Path=AddChartCommand}"


    interessant dass es auch ohne das geht. Dann kann es ja nicht falsch sein, oder?
    es ist nicht falsch, es ist nur total unsicher.

    Man kann ja auch mit Option Strict Off richtigen Code coden, nur überprüft der Compiler das nicht, sodass sich Fehler leichter einschleichen und schwerer zu finden sind.

    btw: einen DataContext an ein Command zu binden ist sinnlos.