Announcement

Collapse
No announcement yet.

WPF - View im Stackpanel

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

  • WPF - View im Stackpanel

    Hallo, Für ein WPF Programm brauche ich eine View (mit einem dahinter liegenden ViewModel), die ich in separat in XAML gestaltet habe, je nach Programmsituation mindestens einmal, gelegentlich 2, 3, 4.. bis vielleicht 8x untereinander in einem Stackpanel angezeigt, mit unterschiedlichen Daten. Die einzelnen VMs müssen also zur Laufzeit erzeugt werden und die Views dem Stackpanel zugeordnet werden.

    Im Prinzip wird das in etwa so funktionieren wie mit den einzelnen Tab-Seiten in diesem Beispiel: http://msdn.microsoft.com/de-de/magazine/dd419663.aspx
    Aber wie geht das bei einem Stackpanel?

    Danke - Günther
    Günther

  • #2
    Hallo Günther,

    nimm kein Stackpanel sondern ein ItemsControl oder etwas was davon ableitet. Dann kannst du binden wie im MVVM-Artikel mit den TabPages.


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

    Comment


    • #3
      Danke, es klappt :-)

      OT:

      Ich muß mal testen wie das mit dem Link geht
      http://msdn.microsoft.com/de-de/magazine/dd419663.aspx

      Das mit dem Link funzt nicht. Wie macht man das, daß da der Seitentitel statt der Adresse erscheint?
      Günther

      Comment


      • #4
        Hallo Günther,

        dazu muss folgender BB-Code verwendet werden:
        [url=http://msdn.microsoft.com/de-de/magazine/dd419663.aspx]WPF-Anwendungen mit dem Model-View-ViewModel-Entwurfsmuster[/url]
        anstatt:
        [url]http://msdn.microsoft.com/de-de/magazine/dd419663.aspx[/url]

        Um mir das zu erleichtern verwende ich das FireFox-AddOn CoLT :: Add-ons for Firefox -> dann geht es auch per Copy & Paste.

        Anmerkung: oben habe ich das mit den noparse-Tags dargestellt.


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

        Comment


        • #5
          da darf man noch nicht einmal einfach nur Danke sagen - der Text wäre zu kurz...
          Günther

          Comment


          • #6
            Und weil das so wunderschön funktioniert möchte ich soetwas nun auch in meinem Silverlight Programm haben. Nur, wie ordnet man da die View dem zur Laufzeit erzeugten ViewModel zu? Im WPF geht das in der Datei MainPageResources.xaml:
            Code:
              <DataTemplate DataType="{x:Type vm:MeinViewModel}">
                    <vw:MeinView />
                </DataTemplate>
            Der Compiler sagt mir dann:
            Fehler 1 Der DataTemplate-Typ enthält keine DataType-Eigenschaft.

            Und die Art, wie die Zuordnung bisher funktioniert hat - in XAML die View fest verankert, im c# Code dem Grid in dem sich die View befindet, einen DataContext zuordnen - das geht ja jetzt nicht...

            Danke - Günther
            Günther

            Comment


            • #7
              Hallo,

              siehe mvvm - Silverlight 4 DataTemplate DataType und auch DataTemplate DataType in SilverLight (von dir selbst )


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

              Comment


              • #8
                Originally posted by gfoidl View Post
                ...und auch DataTemplate DataType in SilverLight (von dir selbst )
                Das Problem, eine View zur Laufzeit einem ViewModel zuzuordnen, wurde in meinem Beitrag nicht angesprochen. Nur umgekehrt, und das auch nicht vollkommen dynamisch.

                Aber der andere Link brachte mich auf die Idee, dass man ja auch mal die Views in den using-Zeilen aufnehmen könnte. Nur angezeigt wird mein View noch nicht

                Code:
                   MeinViewModel VM=new MeinViewModel(this, ModelDaten);
                #if SILVERLIGHT
                   MeinView V = new MeinView();
                   V.DataContext = VM;
                #endif                      
                   this.Workspaces.Add(VM);
                Günther

                Comment


                • #9
                  Na endlich... Diese Seite hat mich zum Ziel gebracht:
                  silverlight - Binding to View Model Property from within ItemsControl ...


                  Code:
                  <ScrollViewer Grid.Row="2" VerticalAlignment="Stretch">
                                      <ItemsControl  ItemsSource="{Binding Path=MyWorkspaces}">
                                          <ItemsControl.ItemsPanel>
                                              <ItemsPanelTemplate>
                                                  <StackPanel />
                                              </ItemsPanelTemplate>
                                          </ItemsControl.ItemsPanel>
                                          <ItemsControl.ItemTemplate>
                                              <DataTemplate>
                                                  <view:MyView/>
                                              </DataTemplate>
                                          </ItemsControl.ItemTemplate>
                                      </ItemsControl>
                                  </ScrollViewer>
                  Günther

                  Comment

                  Working...
                  X