Enum als Commandparameter

  • WPF

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

    Enum als Commandparameter

    Hallo zusammen!

    Mein Button soll als Commandparameter einen Wert aus einem Enum übertragen. In der vom Command aufgerufenen Methode soll durch Case Select dann je nach Wert eine bestimmte Aktion ausgeführt werden. Der Command an sich funktioniert und die Übergabe eines Parameters in Textform ist kein Problem. Besser und fehlersicherer wäre aber ein Enum. Im Internet findet man häufig diesen Code:

    XML-Quellcode

    1. <Button CommandParameter="{x:Static local:SearchPageType.First}" .../>


    Mein Problem: ich verstehe nicht wo die Enum anzulegen ist, um so darauf zuzugreifen.

    Meine Enum sieht erst mal so aus:

    XML-Quellcode

    1. Public Enum TestEnum2
    2. Enum1
    3. Enum2
    4. Enum3
    5. End Enum


    Sie befindet sich in der Klasse, die auch den Command und die zugehörige Methode enthält. Versuche die Enum stattdessen in eine andere Klasse oder gar in ein Modul zu packen funktionierten auch nicht. Was genau muss man tun, um z.B. den ersten Wert der Enum als Parameter in die Methode zu senden?

    XML-Quellcode

    1. <Button CommandParameter="{x:Static local:TestEnum2.Enum1}" .../>


    VB.NET-Quellcode

    1. Private Sub EnumSub(obj As Object)
    2. Dim Para As TestEnum2 = DirectCast(obj, TestEnum2)
    3. Select Case Para
    4. Case TestEnum2.Enum1
    5. 'Mach wat
    6. Case TestEnum2.Enum2
    7. 'mach wat anderes
    8. End Select
    9. End Sub


    Gruß

    eddi
    Leider hab ich erst jetzt wieder Zeit.
    Soweit ich es verstehe, umfasst der Namespace local: das gesamte Projekt, solange kein eigener Namespace verwendet wird. Mein Projekt nutzt keine selbst angelegten Namespaces.
    Ein Testprojekt mit dem Nötigsten wurde eben erstellt. Erster Versuch ohne eigene Namespaces und Zugriff über local:. Weil das nicht funktionierte wurde zum Test ein Namespace eingefügt. Gleiche Fehlermeldung: TestEnum01 ist im Namespace ... nicht enthalten.
    Die Instanz des Programmcodes wird in der Application als shared angelegt, um im original Projekt global auf die Daten zuzugreifen.
    Zwar lässt sich das Problem mit dem Parameter grundsätzlich anders und recht einfach lösen, aber mich interessiert jetzt schon was ich falsch mache. Daher hänge ich das Testprojekt mal an und hoffe jemand schaut mal drüber.

    Gruß
    eddi
    Dateien
    So:

    VB.NET-Quellcode

    1. Namespace test
    2. Public Enum TestEnum01
    3. Wert1
    4. Wert2
    5. End Enum
    6. Public Class Programm_Code
    7. '...
    Xaml kann keine verschachtelten Klassen, daher darf der Enum nicht innerhalb einer Klasse angelegt sein.
    Zumindest bis vs2017 issas so.
    Vielleicht erbarmt sich ms ja noch, und macht das denkbare doch noch möglich.

    ErfinderDesRades schrieb:

    daher darf der Enum nicht innerhalb einer Klasse angelegt sein.
    Ähnlich verhält sich bei Interfaces in VB vs C#:
    Du kannst in einem VB-Interface ein Enum deklarieren, in C# nicht:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!