SlideShare ist ein Scribd-Unternehmen logo
1 von 25
© 2012 Microsoft Corporation. Alle Rechte vorbehalten.   Microsoft Student Partners
Wer kann das MVC-Pattern
erklären?
Und jetzt etwas ganz anderes:
Datenbindung
Bei der Datenbindung geht es darum,
zwei Datenquellen bzw. -senken zu
verbinden und synchron zu halten.
DEMO
Es gibt drei Arten der Datenbindung:
One-Way (Wenn sich A ändert, ändert sich auch B)



     A                  B
Es gibt drei Arten der Datenbindung:
Two-Way (Wenn sich A ändert, ändert sich B und wenn sich B
ändert, ändert sich A)


     A                  B
Es gibt drei Arten der Datenbindung:
One-Time (B erhält einmalig den Wert von A)


               1x
     A                   B
DEMO
Datenbindung zwischen UI und Datenmodell
Restaurant
string Name;

string Category;

float Rating;

int RatingCount;

ImageSource Photo;

Address Address;

string OpeningHours;

string Description;

Comment[] Comments;
Restaurant            Comment
string Name;           string Title;

string Category;       float Rating;

float Rating;          User Author;

int RatingCount;       string Text;

ImageSource Photo;

Address Address;

string OpeningHours;

string Description;

Comment[] Comments;
Jedes XAML-Steuerelement hat eine
Eigenschaft „DataContext“, die auf
das Datenmodell verweist.
Restaurant
    string Name;

    string Category;

    float Rating;

    int RatingCount;

    ImageSource Photo;

    Address Address;
?   string OpeningHours;

    string Description;

    Comment[] Comments;
Was wir bisher gesehen haben:
Die View ist direkt an das Model gebunden.



    Model               View
Problem-Domäne               UI-Domäne




         Model                    ViewModel               View




Das ViewModel ist eine Abstraktion der View. Es stellt
Informationen aus dem Model so bereit, wie es die View benötigt.
Gleichzeitig nimmt es Informationen aus der View entgegen und
bringt diese in das Model ein.
Model-View-ViewModel (MVVM)
Restaurant
                         string Name;

                         string Category;

                         float Rating;
RestaurantViewModel
                         int RatingCount;
Restaurant Restaurant;
                         ImageSource Photo;
float UserRating;
                         Address Address;

                         string OpeningHours;

                         string Description;

                         Comment[] Comments;
C#                                                       C#
class RestaurantViewModel                                class Restaurant
{                                                        {
    public Restaurant Restaurant { get; private set; }       private float aggregatedRating = 0;

     public float UserRating                                  public float Rating
     {                                                        {
        get                                                       get
        {                                                         {
             return _userRating;                                      return aggregatedRating / RatingCount;
        }                                                         }
                                                              }
         set
         {                                                    public int RatingCount { get; private set; }
               _userRating = value;
               Restaurant.Rate(_userRating);                  public void Rate(float rating)
         }                                                    {
     }                                                            aggregatedRating += rating;
}                                                                 RatingCount++;
                                                              }
                                                         }
Restaurant
                         string Name;

                         string Category;

                         float Rating;
RestaurantViewModel
                         int RatingCount;
Restaurant Restaurant;
                         ImageSource Photo;
float UserRating;
                         Address Address;

                         string OpeningHours;

                         string Description;

                         Comment[] Comments;
C#

interface INotifyPropertyChanged
{
   event PropertyChangedEventHandler PropertyChanged;
}
C#

class Restaurant
{
    public void Rate(float rating)
    {
        aggregatedRating += rating;
        RatingCount++;

         OnRatingChanged();
     }

     private void OnRatingChanged()
     {
         if (PropertyChanged != null)
         {
             PropertyChanged(this, new PropertyChangedEventArgs("Rating"));
         }
     }

     public event PropertyChangedEventHandler PropertyChanged;
}
Commands erlauben es, UI-
Ereignisse (z.B. Klicks) über
Datenbindung an ein ViewModel
weiterzuleiten.
ValueCoverter stehen zwischen
Datenbindungsquelle und –ziel und
konvertieren Werte.
DEMO

Weitere ähnliche Inhalte

Mehr von Jan Hentschel

Was ist neu an Windows 8
Was ist neu an Windows 8Was ist neu an Windows 8
Was ist neu an Windows 8Jan Hentschel
 
Grundlagen des UI Designs
Grundlagen des UI DesignsGrundlagen des UI Designs
Grundlagen des UI DesignsJan Hentschel
 
Einführung in Blend
Einführung in BlendEinführung in Blend
Einführung in BlendJan Hentschel
 
Windows Azure SQL Databases
Windows Azure SQL DatabasesWindows Azure SQL Databases
Windows Azure SQL DatabasesJan Hentschel
 
Windows Azure Mobile Services
Windows Azure Mobile ServicesWindows Azure Mobile Services
Windows Azure Mobile ServicesJan Hentschel
 
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenSQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenJan Hentschel
 
MongoDB on Linux VM in Windows Azure
MongoDB on Linux VM in Windows AzureMongoDB on Linux VM in Windows Azure
MongoDB on Linux VM in Windows AzureJan Hentschel
 

Mehr von Jan Hentschel (7)

Was ist neu an Windows 8
Was ist neu an Windows 8Was ist neu an Windows 8
Was ist neu an Windows 8
 
Grundlagen des UI Designs
Grundlagen des UI DesignsGrundlagen des UI Designs
Grundlagen des UI Designs
 
Einführung in Blend
Einführung in BlendEinführung in Blend
Einführung in Blend
 
Windows Azure SQL Databases
Windows Azure SQL DatabasesWindows Azure SQL Databases
Windows Azure SQL Databases
 
Windows Azure Mobile Services
Windows Azure Mobile ServicesWindows Azure Mobile Services
Windows Azure Mobile Services
 
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreibenSQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
SQL Server auf Infrastructure-as-a-Services (IaaS) in der Cloud betreiben
 
MongoDB on Linux VM in Windows Azure
MongoDB on Linux VM in Windows AzureMongoDB on Linux VM in Windows Azure
MongoDB on Linux VM in Windows Azure
 

Datenbindung mit XAML in Windows 8

  • 1. © 2012 Microsoft Corporation. Alle Rechte vorbehalten. Microsoft Student Partners
  • 2. Wer kann das MVC-Pattern erklären?
  • 3. Und jetzt etwas ganz anderes: Datenbindung
  • 4. Bei der Datenbindung geht es darum, zwei Datenquellen bzw. -senken zu verbinden und synchron zu halten.
  • 6. Es gibt drei Arten der Datenbindung: One-Way (Wenn sich A ändert, ändert sich auch B) A B
  • 7. Es gibt drei Arten der Datenbindung: Two-Way (Wenn sich A ändert, ändert sich B und wenn sich B ändert, ändert sich A) A B
  • 8. Es gibt drei Arten der Datenbindung: One-Time (B erhält einmalig den Wert von A) 1x A B
  • 10. Datenbindung zwischen UI und Datenmodell
  • 11. Restaurant string Name; string Category; float Rating; int RatingCount; ImageSource Photo; Address Address; string OpeningHours; string Description; Comment[] Comments;
  • 12. Restaurant Comment string Name; string Title; string Category; float Rating; float Rating; User Author; int RatingCount; string Text; ImageSource Photo; Address Address; string OpeningHours; string Description; Comment[] Comments;
  • 13. Jedes XAML-Steuerelement hat eine Eigenschaft „DataContext“, die auf das Datenmodell verweist.
  • 14. Restaurant string Name; string Category; float Rating; int RatingCount; ImageSource Photo; Address Address; ? string OpeningHours; string Description; Comment[] Comments;
  • 15. Was wir bisher gesehen haben: Die View ist direkt an das Model gebunden. Model View
  • 16. Problem-Domäne UI-Domäne Model ViewModel View Das ViewModel ist eine Abstraktion der View. Es stellt Informationen aus dem Model so bereit, wie es die View benötigt. Gleichzeitig nimmt es Informationen aus der View entgegen und bringt diese in das Model ein.
  • 18. Restaurant string Name; string Category; float Rating; RestaurantViewModel int RatingCount; Restaurant Restaurant; ImageSource Photo; float UserRating; Address Address; string OpeningHours; string Description; Comment[] Comments;
  • 19. C# C# class RestaurantViewModel class Restaurant { { public Restaurant Restaurant { get; private set; } private float aggregatedRating = 0; public float UserRating public float Rating { { get get { { return _userRating; return aggregatedRating / RatingCount; } } } set { public int RatingCount { get; private set; } _userRating = value; Restaurant.Rate(_userRating); public void Rate(float rating) } { } aggregatedRating += rating; } RatingCount++; } }
  • 20. Restaurant string Name; string Category; float Rating; RestaurantViewModel int RatingCount; Restaurant Restaurant; ImageSource Photo; float UserRating; Address Address; string OpeningHours; string Description; Comment[] Comments;
  • 21. C# interface INotifyPropertyChanged { event PropertyChangedEventHandler PropertyChanged; }
  • 22. C# class Restaurant { public void Rate(float rating) { aggregatedRating += rating; RatingCount++; OnRatingChanged(); } private void OnRatingChanged() { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("Rating")); } } public event PropertyChangedEventHandler PropertyChanged; }
  • 23. Commands erlauben es, UI- Ereignisse (z.B. Klicks) über Datenbindung an ein ViewModel weiterzuleiten.
  • 24. ValueCoverter stehen zwischen Datenbindungsquelle und –ziel und konvertieren Werte.
  • 25. DEMO

Hinweis der Redaktion

  1. Was an Antworten kommen sollte (sonst ggf. nachhelfen):Das Model bildet die Daten und Operationen abstrakt aus Sicht der Problemdomäne abDie View ist eine mögliche Darstellung der Daten im ModelDer Controller vermittelt zwischen View und Model und übersetzt Befehle aus der View in Operationen auf dem ModelDas View registriert sich am Model und wird über Veränderungen informiert (Observer Pattern)MVC sorgt für eine lose Kopplung der einzelnen komponenten
  2. https://github.com/HorizonNet/DEMO-Windows8-DataBinding-1 (Diese Demo bitte nicht nur zeigen sondern live bauen)
  3. https://github.com/HorizonNet/DEMO-Windows8-DataBinding-2 (Diese Demo bitte nicht nur zeigen sondern live bauen)
  4. Über Datenbindung lässt sich eine View direkt mit Daten aus dem Datenmodell befüllen
  5. Das Funktioniert auch mit Listen
  6. Die DataContext-Eigenschaft wird auch an Kindelemente vererbt.
  7. Wie aber lassen sich Änderungen aus der UI an das Datenmodell zurückspielen? Es gibt natürlich Two-Way-Datenbindung, aber das Datenmodell hat dafür keinen „Empfänger“. Das Datenmodell entsprechend anzupassen würde eine Abhängigkeit zwischen View und Model erzeugen.
  8. Wie aber lassen sich Änderungen aus der UI an das Datenmodell zurückspielen? Es gibt natürlich Two-Way-Datenbindung, aber das Datenmodell hat dafür keinen „Empfänger“. Das Datenmodell entsprechend anzupassen würde eine Abhängigkeit zwischen View und Model erzeugen.
  9. Wie aber lassen sich Änderungen aus der UI an das Datenmodell zurückspielen? Es gibt natürlich Two-Way-Datenbindung, aber das Datenmodell hat dafür keinen „Empfänger“. Das Datenmodell entsprechend anzupassen würde eine Abhängigkeit zwischen View und Model erzeugen.
  10. https://github.com/HorizonNet/DEMO-Windows8-DataBinding-3(die eben erklärten Konzept anhand von Demo 3 zeigen und erklären)Dann https://github.com/HorizonNet/DEMO-Windows8-DataBinding-4 gemeinsam mit den Teilnehmer live bauen