Hier ein kleines HowTo wie ein Objekt bzw ein Liste von Objekten, im Entwurfsmuster MVVM für WPF, durchgereicht wird.
(Hinweis: Das SuperScriptDigit zeigt auf den entsprechenden Quelltext).

Zuerst erstelle ich im Model eine Klasse Person¹ und die Klasse People². Diese wiederum instanziiert  im Konstruktor eine ObservableCollection von Personen. Wie man aber die Daten in eine ObservableCollection steckt ist im Endeffekt schnuppe, ob per LINQ, XML, SQL, konventioneller Datenbindung oder eben über ein Mock.

Im ViewModel welches die Methode OnPropertyChanged aus der Klasse ViewModelBase benötigt,  erstelle ich mir ein ViewModelProperty mit der Bezeichnung GetPersons³. In deren Konstruktor binde ich die ObservableCollection People an das Property.

In der UI, der View in diesem Pattern, binde ich das entsprechende Element (ListView) an die Collection⁴. Das Property im ViewModel kann aber auch gleichermassen an andere Elemente gebunden werden. In diesem Beispiel lass ich zusätzlich das Geburtsdatum (ausgedacht) der Feuersteins in der darunter liegenden TextBox,  nach selektieren des Namens im ListView, anzeigen⁵. Dazu binde ich die TextBox über ElementName, an die ListView und deren Pfad SelectedItem.

Um dieses Beispiel nachzubauen benötigt man vorbereitend das Model View ViewModel ToolKit. Informationen dazu stehen am Ende des Artikels.

Klasse Person ¹)

1
2
3
4
5
6
public class Person
{
    public String Vorname { get; set; }
    public String Nachname { get; set; }
    public DateTime Geburtstag { get; set; }
}

Klasse People ²)

1
2
3
4
5
6
7
8
9
10
class People : ObservableCollection<Person>
{
    public People()
    {
        Add(new Person { Vorname = "Fred", Nachname = "Feuerstein", Geburtstag = DateTime.Parse("05.06.1955") });
        Add(new Person { Vorname = "Willma", Nachname = "Feuerstein", Geburtstag = DateTime.Parse("05.06.1965") });
        Add(new Person { Vorname = "Barney", Nachname = "Geroellheimer", Geburtstag = DateTime.Parse("05.06.1964") });
        Add(new Person { Vorname = "Betty", Nachname = "Geroellheimer", Geburtstag = DateTime.Parse("01.12.1966")});
    }
}

ViewModel PersonsViewModel ³)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class PersonsViewModel : ViewModelBase
{
    #region ViewModelProperty: GetPersons
    private People _persons;
    public People GetPersons
    {
        get
        {
            return _persons;
        }
        set
        {
            _persons = value;
            OnPropertyChanged("GetPersons");
        }
    }
    #endregion

    public PersonsViewModel()
    {
        GetPersons = new People();
    }
}

View / ListViewbinding ⁴)

1
<ListBox ItemsSource="{Binding GetPersons}" />


Binden an mehreren Elementen im XAMl⁵

1
2
3
4
5
6
7
8
9
10
11
<ListBox ItemsSource="{Binding GetPersons}" Margin="12,12,12,0" x:Name="listBox1" Height="100" VerticalAlignment="Top">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Path=Nachname}" Margin="0 0 5 0" />
                <TextBlock Text="{Binding Path=Vorname}" Margin="0 0 5 0"/>
            </StackPanel>
        </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>
<TextBlock DataContext="{Binding ElementName=listBox1, Path=SelectedItem}" Text="{Binding Geburtstag, StringFormat=dd.MM.yyyy}" Margin="12 0 0 0" />

Nochmal ein MVVM Überblick

Model

  • ObjectClass
  • ObservableCollection

ViewModel

  • ViewModelProperty (ObservableCollection)
  • DataBinding

View

  • DataTemplate
  • Binding

Ein leeres MVVM Project (Model View ViewModel ToolKit) kann man sich hier downloaden und als Template in sein VisualStudio importieren. Ich hatte aber Probleme das Template erfolgreich zu laden, so dass ich von Edward ein leeres exportiertes Projekt als Vorlage importiert habe. Diese Vorlage steht hier zum Download bereit.

Wie man ein Projekt als Vorlage exportiert und wiederverwenden kann, erfährst Du unter „Im- und Exportieren von VisualStudio Projekten als Vorlage“.

Vom Objekt ins Element – Datenbindung unter MVVM
Markiert in:        

3 thoughts on “Vom Objekt ins Element – Datenbindung unter MVVM

  • Pingback: StringFormat & MultiBinding im XAML - Quicky | Biggle's Blog

  • Oktober 1, 2009 bei 22:01
    Permalink

    hmm, nicht gerade konstruktiv dein Kommentar.. Was ist hier nicht MVVM Deiner Meinung nach?
    Das Model stellt das Objekt dar, das ViewModel stellt die Daten für die View bereit, die View bindet die Daten… was daran ist deiner Meinung nicht verständlich?
    Und den einzigen Bezug den ich sehe, auf den ich selbst auch referenziere btw, ist die Klasse Person…

    Desweiteren finde ich das nicht die feine Art anonym in meinen Blog rumzuposaunen und klug zu scheissen! Besser wäre es den Artikel sinnvoll zu ergänzen, aber da scheint es Du bist nicht der richtige dafür…

Kommentare sind deaktiviert.