Fehler beim Anzeigen eines UserControls in MVVM Pattern

  • WPF

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von florian03.

    Fehler beim Anzeigen eines UserControls in MVVM Pattern

    Hallo,

    Ich habe ein (kleines aber sehr blödes) Problem bei meinem aktuellen MVVM Projekt:

    In meinem Projekt wollte ich nun mein erstes View anzeigen (uclLogin).
    Dafür habe ich in der App.xaml ein DataTemplate hinzugefügt:

    XML-Quellcode

    1. <Application.Resources>
    2. <ResourceDictionary>
    3. <DataTemplate DataType="{x:Type workspaceVMs:LoginVM}">
    4. <workspaces:uclLogin></workspaces:uclLogin>
    5. </DataTemplate>
    6. </ResourceDictionary>
    7. </Application.Resources>


    Wenn ich aber das Projekt starte öffnet sich nur ein leeres Window...Ich habe schon geschaut das ViewModel wird dem Window richtig übergeben.

    App.xaml.cs:

    C#-Quellcode

    1. ​protected override void OnStartup(StartupEventArgs e)
    2. {
    3. ServiceInjector.InjectServices();
    4. var winSer = ServiceContainer.GetService<IWindowService>();
    5. LoginVM vm = new LoginVM();
    6. winSer.OpenWindow("Login", vm, null);
    7. }


    Ihr könnt das Projekt unter GitHub finden: github.com/florian03-1/MusicManager

    Von der Funktionsweise nutze ich Services um die Fenster MVVM Konform zu öffnen (Richtige Übergabe eines ViewModels)

    Hast irgendjemand eine Idee woran das liegen könnte, dass kein UserControl angezeigt wird?

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Hallo Florian

    Soweit sieht das aber ganze gut aus. Es öffnet sich aber das PWindow nicht das MainWindow oder?

    Versuche bitte mal mindestens einen Style in der App.xaml zu hinterlegen. Z.b.

    XML-Quellcode

    1. <Style TargetType="Rectangle">
    2. <Setter Property="Fill" Value="Transparent">
    3. </Style>


    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,

    Exakt, das PWindow ist bei mir das, was bei dir das SPSWindow ist. Hat einfach nur einen anderen Namen.
    Ich habe den Style in der App.xaml hinterlegt, doch was soll das jetzt bringen?

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor

    florian03 schrieb:

    Ich habe den Style in der App.xaml hinterlegt, doch was soll das jetzt bringen?

    Na funktionierts denn?? Ich hab da eine vermutung...

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

    Kommando zurück.

    Ich hab jetzt nochmals auf GitHub nachgesehen.
    Dein PWindow befindet sich ja im View Projekt und das DataTemplate hast du ja im WPF Projekt.

    Da solltest du im View-Projekt ein ResourceDictionary erstellen. z.b. DefaultTemplates.xaml. Dort packst du das DataTemplate hinein.
    Und in der App.XAML dann das ResourceDictionary einbinden.

    Grüße
    Sascha

    Edit:

    florian03 schrieb:

    was soll denn jetzt dadurch funktionieren?

    Da gibts einen Bug das die WPF die Templates nicht übernimmt wenn sonst nichts in der App.xaml zum kompilieren vorhanden ist.

    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,

    ich versuche es gerade so umzusetzen wie du es sagst, aber es scheint so, als findet VisualStudio keine RessourceDictionaries aus anderen Projekten (Verweis ist gesetzt)


    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Hallo

    Eigenschaftenfenster? Ne

    OK, du hast nun ein ResourceDictionary im View-Projekt angelegt. Dort hast du jetzt auch dein DataTemplate drinnen.

    Zwei möglichkeiten: Entweder in der App.xaml nun das ResourceDictionary importieren mit Angabe der Assambly, oder noch einfacher.
    In deinem PWindow einfach das ResourceDictionary einbinden.

    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,

    entweder ich mache etwas komplett falsch
    ODER
    ich verstehe dich nicht richtig
    ODER
    mein Projekt ist irgendwie kaputt.

    Es funktioniert noch immer nicht. Was ist denn da los???

    Viele Grüße
    Florian
    ----

    WebApps mit C#: Blazor
    Hallo

    Ich habe dein Projekt von GitHub nun mal geklont und als erstes einen Haltepunkt gesetzt in PWindow_Loaded und siehe da. Wird nicht durchlaufen wodurch der Datencontext auch nicht gesetzt wird.
    Sieht man auch gut im XAML LiveView.
    Du dürftest wohl beim übersetzen meines Codes vergessen haben die Handler zu setzen, was man unter C# ja machen muss da es hier ja kein Handle..... gibt.

    Also in beiden Konstruktoren folgendes rein this.Loaded += PWindow_Loaded; und gut ists.

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