Ahoj,
jestli tomu spravne rozumim, tak mas problem zejmena s designerem..
Pokud pouzivas nektere pokrocilejsi techniky, tak doporucuju designer uplne vynechat popr. pouzivat ho jen velice ramcove. Osobne mi prijde prace v x(a)mlu daleko rychlejsi nez-li pretahavani a nastavovani vlastnosti pomoci designeru. Navic se ti negeneruji zbytecne parametry, ktere nepotrebujes, ci ponechavas je v defaultnim nastaveni.
Designer taky vetsinou sazi prvky GUI fixne, tedy pozice X, Y, vyska, sirka + margin.
V praxi ale vetsinou vyuzivame layouty (http://www.wpftutorial.net/Layout.html).
Po pravde receno, wpf ma tak propracovany system bindingu, ze vyuzivat udalosti ala WinForms mi prijde skoda.
Napr. pokud mas ve WPF jednoduchy datagrid, textBox a tlacitko a chces pomoci tlacitka pridavat text do gridu, tak muzes vyuzit bud standardni udalostni model tzn:
-
napr. v udalosti Loaded si nactes zdroj dat ItemsSource (napr. xml, db ci jinak)
-
double klikem vytvoris udalost onClick nad tlacitkem
-
do OnClick udalosti zapises sebrani hodnoty z textBoxu, pridani do ItemsSource
-
dale musis vytahnout View a refreshnout, aby se ti to vubec zobrazilo
Toto vypada relativne jednoduse, ale prijde zakaznik (ktery je vzdycky nespokojeny), umane si, ze misto gridu chce listView, misto textBoxu chce comboBox a pro tebe to bude znamenat rozkopat pulku jak GUI (cemuz se nevyhneme nikdy), tak ale i pulku vykonnyho kodu. Udalosti jsou zkratka prilis vazany na konkretni prvky GUI.
WPF ale nabizi novy a po zvladnuti daleko prijemnejsi model propojovani dat.
V dnesni dobe se ruzny odnoze MVC vyuzivaji vsude. I WPF ma svoji odnoz nazyvajici se MVVM neboli
Model-View-ViewModel
Spravne by to asi melo spis byt Model-ViewModel-View, protoze ten dulezity prvek je ViewModel, ktery reprezentuje ten "klin" mezi daty a GUI.
Vysledek je vlastne ten, ze nepises udalosti pro konkretni prvky, ale pises obecne nejakou akci, a na GUI zadas, kterou akci ma tlacitko spustit. To jestli akce je implementovana ci neni, o tom GUI nevi naprosto nic, analogicky ani ViewModel nevi, jestli data, ktery pozmenil View zobrazuje ci ne.
Komunikace View-> ViewModel jde celkem bez problemu, vyuzivaji se tzn. Commandy, ktere se z GUI vyvolavaji. Horsi je ale komunikace z ViewModelu na View.
Pokud napr. pomoci tlacitka pridas nejaky prvek, tak i pres udalosti musis obnovit datagrid, aby se ti data zobrazily.
U MVVM to funguje trocha jinak. ViewModel musi implementovat rozhrani INotifyPropertyChanged a pri zmene jakyhokoliv prvku odpali udalost o tom, ze se zmenila vlastnost se jmenem XXX. Na to reaguje View.
Z pocatku se toto zda jako slozite, ale je to velice elegantni a zrovna mne uz se to nekolikrat osvedcilo, protoze zakaznik meni nazor ze dne na den a tam, kde jeden den byl checkBox je druhy den comboBox a treti den opet checkBox.
Pokud te to aspon trochu zaujalo, doporucuju tyto stranky:
http://msdn.microsoft.com/…d419663.aspx
http://xaml.cz/…za-krokem-1/
Evzen