Az előző két bejegyzésben található példák segítségével egy alap Wpf adatkötés már felépíthető. A kód legszebb és végleges formájához még egy fontos lépés hiányzik.
Legyen adott egy osztály, amely csak adatokat tartalmaz, illetve a benne tárolt adatok kezelését felügyeli. Ez lesz a Model osztály. Az előzőekben bemutatott deklaráció ide kerül át.
A Model osztályra csak és kizárólag egy helyen történik hivatkozás, ez pedig a ViewModel osztály. Minden Model osztály egymástól független, zárt egységet alkot. A ViewModel osztály több Model osztályra is hivatkozhat.
A ViewModel osztály ennek ismeretében az alábbi:
A fenti kód egy gyűjteményt hoz létre a Model osztályból. Továbbra is ez az osztály lesz a DataContext az XAML számára. Mivel az XAML - és annak mögöttes kódja - tartalmazza mindazt, amit látunk ezért a továbbiakban ezt View-nak nevezzük. Az XAML-hez tartozó kód nem változik az előzőekben leírtakhoz.
A View csak a ViewModel osztályra hivatkozik, a Model osztályról nem tartalmaz semmiféle referenciát. Ezt az osztályhármat nevezk Model-View-ViewModel, röviden Mvvm mintának.
- A Model nem tartalmaz semmilyen referenciát egyik osztályra sem
- A ViewModel tartalmaz referenciát a Modelra, és tartalmazhat referenciát a View-ra
- A View tartalmaz referenciát a ViewModel-re
Az XAML kód az alábbi:
A XAML DataContext-je jelen pillanatban a _viewModel;
A ViewModel tartalmaz egy gyűjteményt: MyModelCollection. A listbox ebből szedi az adatokat (ItemsSource="{Binding MyModelCollection}")
Mindez automatikusan megtörténik.
A Listboxban található ItemTemplate leírja, hogy egy ListBox Item hogy nézzen ki.
A ViewModel tartalmaz egy gyűjteményt: MyModelCollection. A listbox ebből szedi az adatokat (ItemsSource="{Binding MyModelCollection}")
Mindez automatikusan megtörténik.
A Listboxban található ItemTemplate leírja, hogy egy ListBox Item hogy nézzen ki.
Jelenleg mindössze egy TextBlock-ot tartalmaz.
A ListBox a MyModelCollection gyűjteményből szedi az adatait, ami Model típusú.
A Model-nek van egy property-je: TextValue
Ez látható a TextBlock Text attribútumához kapcsolva (<TextBlock Text="{Binding TextValue}" Height="15"/>)
A ListBox a MyModelCollection gyűjteményből szedi az adatait, ami Model típusú.
A Model-nek van egy property-je: TextValue
Ez látható a TextBlock Text attribútumához kapcsolva (<TextBlock Text="{Binding TextValue}" Height="15"/>)
Nincsenek megjegyzések:
Megjegyzés küldése