270 likes | 361 Views
Welcome. Poboljšajte UI/UX vaših Windows (Phone) 8 aplikacija na jednostavan način. Toni Petrina Ekobit d.o.o. MVP for C# @to_pe http://tonicodes.net/blog/. Agenda. MVVM Attached properties – poor man’s behaviors Behaviors Triggers Fun . Windows Phone 8 Windows 8.1. MVVM.
E N D
Poboljšajte UI/UX vaših Windows (Phone) 8 aplikacijanajednostavannačin Toni Petrina Ekobit d.o.o. MVP for C# @to_pe http://tonicodes.net/blog/
Agenda MVVM Attached properties – poor man’s behaviors Behaviors Triggers Fun Windows Phone 8 Windows 8.1
Što je MVVM • Model-View-ViewModel • Idealan pattern za aplikacije bazirane na XAML-u • Separacija koda u tri sloja • Lagan Unit Testing • Pogodan za višeplatformski razvoj • Ključno pravilo: nema koda u code-behind
Binding • Sve kontrole se pune preko bindinga • Zamjena za evente su komande (ICommand) • Button.Command je zamjena za Click event • Ali nemaju sve kontrole komande! • Što sa ListBox.SelectionChanged, Manipulation* • Smijemo li samo ovaj put prekršiti pravilo?
Attached properties • Nalijepe se na kontrolu • Znaju kad se nalijepe • Nije zamišljeno za dinamičnost • Nemamo dodatne parametre • Nemamo nikakav state
Attached properties - code publicstaticclassAttachedProperties { publicstaticstringGetMyStatic(UIElementelement) { returnelement.GetValue(MyStaticProperty) asstring; } publicstaticvoidSetMyStatic(UIElementelement, stringvalue) { element.SetValue(MyStaticProperty, value); } publicstaticDependencyPropertyMyStaticProperty= DependencyProperty.RegisterAttached( "MyStatic", typeof (string), typeof (ListBox), newPropertyMetadata(string.Empty, PropertyChangedCallback)); privatestaticvoidPropertyChangedCallback( DependencyObjectdependencyObject, DependencyPropertyChangedEventArgsdependencyPropertyChangedEventArgs) { } }
Attached properties –XAML xmlns:wp8="clr-namespace:WP8" <ListBox wp8:AttachedProperties.MyStatic="hello"> </ListBox>
Behaviors • Most između viewa i viewmodela • Znamo kad se kontrola aktivira i kad se deaktivira • Dinamično i može imati vlastite propertye • Microsoft.Expression.Interactions • System.Windows.Interactivity
Behavior<T> – kod publicclassListBoxBehavior : Behavior<ListBox> { protectedoverridevoidOnAttached() { base.OnAttached(); } protectedoverridevoidOnDetaching() { base.OnDetaching(); } }
Behavior<T> – XAML xmlns:wp8="clr-namespace:WP8„ xmlns:i="clr-namespace:System.Windows.Interactivity; assembly=System.Windows.Interactivity" <ListBox wp8:AttachedProperties.MyStatic="hello"> <i:Interaction.Behaviors> <wp8:ListBoxBehavior /> </i:Interaction.Behaviors> </ListBox>
Prednosti behaviora • Reusable • Mogu se koristiti u Blendu • Mogu sadržavati dependency propertiese • Imaju neki state
„Ostatak” interakcije • Topom na muhe • Kad želimo samo brzo povezati komandu iz viewmodela na event – trigger • Triggeri se „okinu” kad se nešto dogodi • I oni izvršavaju akciju • Na event – EventTrigger • Na promjenu propertya (INPC) - PropertyChangedTrigger
Važni za spomenuti • DataStateBehavior • NavigateToPageAction • StoryboardCompletedTrigger • DataStateBehavior
IBehavior • Sami trebamo implementirati Behavior<T> klasu • Imamo IBehavior i IAction • Fale triggeri, pogotovo oni s ciljem • Možemo samo implementirati traženje kontrole
Važni za spomenuti • CallMethodAction • ChangePropertyAction • DataTriggerBehavior • EventTriggerBehavior • GoToStateAction • NavigateToPageAction • http://blendbehaviors.net/
Zaključak • Logiku vani iz code-behinda • Iskoristite razne efekte na više projekata • Have fun