Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de

  
c++.de :: C# und .NET ::  Ribbons und MVVM     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Vitali
Unregistrierter




Beitrag Vitali Unregistrierter 10:16:57 06.03.2012   Titel:   Ribbons und MVVM            Zitieren

Hallo.
Nachdem ich den MVVM Artikel von John Smith im Microsoft Magazin gelesen habe und mir im Anschluss daran noch einen Videoguide zum MVVM Entwurfsmuster angeschaut und soweit nachvollzogen habe, möchte ich das ganze an einem eigenen Beispiel ausprobieren, habe jedoch bereits am Anfang (für mich) recht große Schwierigkeiten bei der Umsetzung.

Ich möchte eine Anwendung erstellen, die grundsätzlich aus drei Zeilen besteht:
1. Ribbons (zur Menüführung)
2. MainContent (Anzeige des eigentlichen Inhalts mittels UserControls)
3. Statusleiste (Label und Fortschrittsbalken)

Nachdem ich nun ein wenig XAML geschrieben habe, tun sich einige Schwierigkeiten in Sachen Datenbindung auf. Ich versuche das Problem mal anhand des bereits bestehenden Codes zu schildern:

Die grafische Oberfläche (relevanter Teil):
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
    <ribbon:Ribbon x:Name="Ribbon" Grid.Row="0" SelectedIndex="{Binding RibbonTabSelectedIndex}">
            <ribbon:Ribbon.ApplicationMenu>
                <ribbon:RibbonApplicationMenu SmallImageSource="/Images/folder.ico">
                    <ribbon:RibbonApplicationMenuItem Header="Hello _Ribbon" />
                </ribbon:RibbonApplicationMenu>
            </ribbon:Ribbon.ApplicationMenu>
            <ribbon:RibbonTab x:Name="ServersTab" Header="Servers">
                <ribbon:RibbonGroup x:Name="Group1" Header="Group1">
                    <ribbon:RibbonButton x:Name="Button1" Label="Button1" />
                    <ribbon:RibbonButton x:Name="Button2" Label="Button2" />
                    <ribbon:RibbonButton x:Name="Button3" Label="Button3" />
                    <ribbon:RibbonButton x:Name="Button4" Label="Button4" />
                </ribbon:RibbonGroup>
            </ribbon:RibbonTab>
            <ribbon:RibbonTab x:Name="ApplicationsTab" Header="Applications">
                <ribbon:RibbonGroup x:Name="Group2" Header="Group1">
                </ribbon:RibbonGroup>
            </ribbon:RibbonTab>
        </ribbon:Ribbon>
 
        <Grid Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <Grid.Background>
                <ImageBrush ImageSource="/Images/bg.png" Stretch="Fill" AlignmentY="Bottom" Opacity="0.4" />
            </Grid.Background>
 
            <ItemsControl Margin="20" Background="White" />
        </Grid>


Momentan habe ich also zwei Ribbons ("Servers" und "Applications"). Je nachdem welcher RibbonTab angeklickt wurde, soll im untenstehenden ItemsControl ein anderes UserControl angezeigt werden.
Die entsprechenden UserControls habe ich bereits angefertigt. Ich habe mir zusätzlich eine ViewModelBase.cs und eine MainWindowViewModel.cs angelegt.

Designtechnisch hielt ich es für sinnvoll pro UserControl ebenfalls ein eigenes ViewModel anzulegen, also sprich "ServersViewModel.cs" und "ApplicationsViewModel.cs".

Die Frage, bzw. eher die Fragen, die ich nun habe:
1. Ist diese Überlegung so korrekt?
2. Wenn Punkt 1 OK ist, wie realisiert man dies?

ich hätte jetzt aus Gewohnheit eine "ObservableCollection<UserControl> Content" angelegt, jedoch bringt mich das nicht weiter, da ich nur ein globales ItemsControl zur Anzeige habe. Wie kann ich das so hinbiegen, dass ich mit Klick auf einen RibbonTab ein neues UserControl anzeigen lassen kann?
GoaZwerg
Mitglied

Benutzerprofil
Anmeldungsdatum: 01.12.2011
Beiträge: 71
Beitrag GoaZwerg Mitglied 20:54:34 02.04.2012   Titel:              Zitieren

Hi Vitali,

sowas mache ich über ein zentrales 'MainViewModel', und bündel darin die einzelnen ViewModels (ich trenne, wie in Deiner Überlegung eben auch, die ViewModels sehr gerne auf um den Code lesbarer und die Klassen möglichst klein zu halten).

Deine MainView (mit dem Ribbon) bindet somit an das MainViewModel, welches wiederum die 'Unter-'-ViewModels bereitstellt, hierbei ist halt nur wichtig ViewModel-Änderungen nach 'oben' zu melden (INotify...).

Ob das wirklich 100pro MVVM-konform ist weiß ich nun auch nicht, aber so hab ichs mir jedenfalls angewöhnt bislang und es funktioniert super und der Code ist schön sauber :)

Viele Grüße
Goa
c++.de :: C# und .NET ::  Ribbons und MVVM   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.