Announcement

Collapse
No announcement yet.

Umsetzung von MVVM

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Umsetzung von MVVM

    Hallo,

    ich befasse mich momentan mit XAML und MVVM. Um diese als Beispiel umzusetzen, möchte ich gerne die Elemente, die ich in einer View-Seite definiere (z.B. Buttons und Textfelder) so mit der Startseite verbinden, dass bei dem Start der Seite in Startseite dargestellt werden. Die Startseite beinhaltet nur ein Grundgrüst (Grid) zur richtige Darstellung der Seite. Meine Frage ist, ob dieses Vorhaben überhaupt machbar ist und wie ich diese umsetzen kann?

    Danke im Voraus

  • #2
    Hallo,

    klar geht das, aber was hat das mit MVVM zu tun?

    Schau dir hierzu am besten Das Model-View-ViewModel (MVVM) Entwurfsmuster für WPF an. Dort siehst du auch wie per DataTemplate ein ViewModel mit dem entsprechenden View verknüpft wird.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Hi,

      vielen Dank für die Antwort. Die Seite kannte ich schon. Bei dem Artikel geht es u.a. darum, die vorhandenen Elemente mit Inhalt zu füllen. Ich muss aber sozusagen die Elemente von einer Seite in die andere transportieren und dort anzeigen. Zum Beispiel:

      Seite 1:
      <Grid ...>

      </Grid>

      Seite 2:
      <Textblock ... />

      Wenn jetzt die Seite 1 aufgerifen wird, soll das Textblock angezeigt werden, ohne dass die Seite 2 aufgerufen werden muss. Ich hoffe, ich konnte mein Vorhaben einigermaßen klarstellen.

      Gruß

      Comment


      • #4
        Also ich verstehs irgendwie nicht.

        Comment


        • #5
          Hi,

          vielen Dank. Es hat sich erledigt. Man kann dies via controls erreichen.

          Gruß

          Comment


          • #6
            Hallo,

            und genau deshalb finde ich den MSDN-Artikel ja gut. Da wirds auch über UserControls gelöst und so sollte eine GUI ja komposiert werden.

            So ist es dann mit MVVM ein leichtes in einem MainWindowViewModel die "GUI" aufzubauen ohne dass tatsächlich die GUI dem ViewModel bekannt ist. Das ist perfekte Trennung der Anliegen.


            mfG Gü
            "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

            Comment


            • #7
              Hi,

              ja das ist perfekt. Die Datenweitergabe ist aber machmal nicht so einfach. Ich muss z.B. in meinem Code von CollectionViewSource im CodeBehind und nicht in XAML Gebrauch machen und diese via "Linq to Obeject" (DataContext) an die XAML-Seite und an eine Listbox zur Anzeige weiterreichen. Obwohl alle Daten bei DataContext vorhanden sind, werden diese Daten in Listbox nicht angezeigt:

              <ListBox Name="record" ItemsSource="{Binding MySource}" DisplayMemberPath="Name" />

              Muss eventuell die Listbox anders aufgebaut sein?

              Danke

              Comment


              • #8
                Hallo,

                in meinem Code von CollectionViewSource im CodeBehind und nicht in XAML Gebrauch machen
                wozu dann MVVM? Da brauchst du i.d.R. die CodeBehind nicht. V.a. dann nicht wenn du Linq auf die Datenquelle anwenden willst. Das gehört eindeutig in das ViewModel.

                Sonst kannst du dir ja die ItemsSource holen und nach ICollectoinView casten.

                mfG Gü
                "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                Comment


                • #9
                  Hi,

                  sorry, ich habe mich mit "CodeBehind" falsch ausgedruckt. Ich meinte den eingentlichen Code in MVVM. Du hast natürlich Recht.

                  Kannst du mir bitte sagen, wie ich eine Listbox auswerten kann? Muss diese auch über MVVM-Codes erfolgen oder darf die Auswertung, welches Item gerade angeklickt ist, auch in dem CodeBehind der zugehörigen Seite erfolgen? Ich habe in MSDN nachgesehen (http://msdn.microsoft.com/en-us/libr...s.listbox.aspx) und das hier gefunden:

                  <ListBox Name="lbi" ItemsSource="{Binding MySource}" DisplayMemberPath="name" />

                  Code:
                  void PrintText(object sender, SelectionChangedEventArgs args)
                  {
                      ListBoxItem lbi = ((sender as ListBox).SelectedItem as ListBoxItem);
                      tb.Text = "   You selected " + lbi.Content.ToString() + ".";
                  }

                  Ich bekomme abe so einen null-Wert bei lbi in "ListBoxItem lbi". Eine Idee?

                  Danke

                  Comment


                  • #10
                    Hallo,

                    Kannst du mir bitte sagen, wie ich eine Listbox auswerten kann? Muss diese auch über MVVM-Codes erfolgen oder darf die Auswertung, welches Item gerade angeklickt ist
                    Binde die SelectedItem-Eigenschaft von der ListBox an eine Eigenschaft im ViewModel.


                    mfG Gü
                    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

                    Comment

                    Working...
                    X